我可以使用jQuery .trigger()和addEventListener()添加的事件侦听器吗?

use*_*014 7 javascript jquery events

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

jQuery('body').trigger('crazy-trigger-event');
jQuery("body").get(0).dispatchEvent(new CustomEvent("crazy-dispatch-event"));
Run Code Online (Sandbox Code Playgroud)

在这里的片段:

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

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

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

似乎使用.on()注册的侦听器接收两种方式触发的事件.

但是,使用.addEventListener()注册的侦听器只接收使用.dispatchEvent()触发的事件.

我的用例是我混合使用遗留代码和jQuery代码,使用.dispatchEvent()似乎最安全,因此它与两者兼容.

那么我可以对代码进行一些更改,以便使用.addEventListener()注册的侦听器可以从.trigger()接收事件吗?

Dar*_*sli 5

简单答案

,你不能。

说明

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

“ [...] jQuery的事件系统 DOM事件系统之上一层。”

Eventhough也有例外,有jQuery的知道哪些事件是由目前的浏览器由于不支持任何有效的方法,缺乏一个的getEventListeners方法。开发人员认为创建解决方案

“[...] 是不可能没有做破坏现有的代码或引起性能问题。”

如果这听起来像是对任何人的挑战,您都可以通过发布解决方案来证明他们是错误的。


可以在Dave MethvinjQuery#2476的回答中找到详细的解释。