我只会用x.click()
触发一个 onclick,但是 jQuery 的jQuery('.swap').mousedown()
貌似不管用,不知道为什么。(谷歌翻译没有用 jQuery,是我在控制台里导入的 jQuery )。
这个按钮的确是使用 mousedown 触发的,因为我从控制台里把它的 mousedown 的最后一个 Event Listener 删掉之后手动点击就没有反应了。
尝试使用过原生 js 的document.createEvent
,然后再dispatchEvent
,但是也貌似不管用。
百度翻译的交换语言按钮就可以很正常地触发。
1
ijrou 2020-08-23 18:35:25 +08:00
trigger,不知道是不是楼主想要的。。。
当然,我也没明白楼主想要什么功能,可能我没接触到过吧 |
2
sarvatathagata OP @ijrou jQuery('.swap').trigger("mousedown");也没用
|
3
ijrou 2020-08-23 19:21:54 +08:00
先确定 jQuery('.swap') 选择到的是否是你要操作的元素,数组的话就取对应的元素,然后再 trigger,如果无聊,那么建议你查看你这个元素上是否绑定了 mousedown 事件,要么就是选择错了元素,要么是这个选择的元素没有 mouedown,要么你要触发的事件的逻辑压根不在 mousedown 上;
|
4
mchl 2020-08-23 19:56:55 +08:00 via iPhone
document.querySelector(‘.swap’).click()
|
5
sarvatathagata OP @mchl 都说了 click 没用了,别 click 了,这个元素压根就没有 click 的 event listener,只有 mousedown
|
6
sarvatathagata OP 现在自己调试了一下,发现 getEventListeners(jQuery('.swap')[0]).mousedown[0].listener()直接调用时 Ug 函数的 a 参数没有 h 属性(这个 h 应该是一个 MouseEvent ),所以会失败,多半是因为直接调用 mousedown 时没有生成正确的 MouseEvent
|
7
sarvatathagata OP 尝试使用
let event=document.createEvent('MouseEvents'); event.initMouseEvent('mousedown',true,false,document.defaultView,0,279,179,207,80,false,false,false,false,0,null); node.dispatchEvent(event); 现在生成的 MouseEvent 与人生成的没有任何区别,除了 isTrusted 是 false 之外。还是没有用。可能谷歌翻译就是不允许脚本点击这个交换按钮吧。 |
8
musi 2020-08-23 20:56:21 +08:00
@sarvatathagata 刚研究了一下,需要先触发 mousedown 再触发 mouseup,其实分析一下请求就不难发现 mousedown 这一步是没有请求发出去的
|
9
sarvatathagata OP @musi 谢谢,能否详细解释一下如何先触发 mousedown 再 mouseup ?我都触发了还是没用
|
10
musi 2020-08-23 21:36:44 +08:00
@sarvatathagata 安装你上面的方法同时创建 mousedown event 和 mouseup event,然后先 dispatch mousedown 再 dispatch mouseup
|
11
musi 2020-08-23 21:40:46 +08:00 1
@sarvatathagata 就 copy 一下你的代码实现一下吧
``` let down=document.createEvent('MouseEvents'), up=document.createEvent('MouseEvents'); down.initMouseEvent('mousedown',true,false,document.defaultView,0,279,179,207,80,false,false,false,false,0,null); up.initMouseEvent('mousedown',true,false,document.defaultView,0,279,179,207,80,false,false,false,false,0,null); node.dispatchEvent(down); setTimeout(() => node.dispatchEvent(up), 300); ``` |
12
sarvatathagata OP 楼上正解,亲测有效,再次表示感谢。
|
14
volvo007 2020-08-24 10:00:54 +08:00
楼上正解
最近正在学 js,特别提到有些页面按钮元素并没有设置 .click 方法,所以 .click 无效 需要绑定一个 mouse 事件才行,但自己还没有实践过,谢谢楼上大佬指点 |