我能翻译成中文:我能在使用addEventListener()添加的事件监听器上使用jQuery .trigger()吗?

13

在我的(JavaScript,jQuery)代码中,我使用两种触发事件的方法。

jQuery('body').trigger('crazy-trigger-event');
jQuery("body").get(0).dispatchEvent(new CustomEvent("crazy-dispatch-event"));

在这个代码片段中:

http://jsfiddle.net/jts9jhbt/3/

我使用了jQuery的.on()方法 和 DOM的.addEventListener()方法来注册自定义事件。

然后我使用jQuery的.trigger()方法和DOM的.dispatchEvent()方法来触发事件。

似乎使用.on()方法注册的监听器两种方式都能接收到。

但是使用.addEventListener()方法注册的监听器只能接收到使用.dispatchEvent()方法触发的事件。

我的用例是我有一些旧代码和jQuery代码混合,看起来最安全的方法是使用.dispatchEvent()以使其与两者兼容。

那么,是否有一些更改可以使使用.addEventListener()方法注册的监听器能够接收.trigger()方法触发的事件呢?

2个回答

11

简单回答

不行,无法实现。

说明

主要原因是jQuery需要跨多个浏览器工作,而且...

"[...] jQuery的事件系统是DOM事件系统的一层封装。"

虽然有些例外,但由于缺少getEventListeners方法,jQuery没有有效的方式知道当前浏览器支持哪些事件。 开发人员认为创建解决方案

"[...] 是不可能的,因为会破坏现有代码影响性能。"

如果有人认为这是一种挑战,可以通过发布您的解决方案来证明他们是错误的。


详细说明请参见Dave MethvinjQuery问题#2476上的答案。


0

我需要点击一个在移动设备上滚动导航栏的事件,这个方法对我很有效:

 let targetElement = document.querySelector(".className");
 let clickEvent = new Event('click');
 targetElement.dispatchEvent(clickEvent);

嗨 @Marian Marian,看起来你的回答与问题无关。问题是关于如何在jQuery的.trigger()方法和JavaScript的.addEventListener()方法之间实现兼容性。 - Jeromy Adofo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接