我可以使用jQuery .trigger()与事件监听器添加addEventListener()

Can I use jQuery .trigger() with event listeners added with addEventListener()?

本文关键字:事件 监听器 添加 addEventListener 可以使 jQuery trigger 我可以      更新时间:2023-09-26

在我的(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()接收事件?

简单回答

,你不能。

<标题>

主要原因是jQuery需要跨多个浏览器工作和…

"[…jQuery的事件系统是位于DOM事件系统之上的一层。"

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

"[…如果不破坏现有代码或导致性能问题.", 是不可能的。

如果对任何人来说这听起来像是一个挑战,你可以自由地通过发布你的解决方案来证明他们是错的。


详细的解释可以在Dave Methvin对jQuery的问题#2476的回答中找到。

我需要点击移动设备上滚动导航条的事件,这对我来说很有效:

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