首页 > 解决方案 > 为什么 jQuery 的 .on() 可以工作,而原生 JavaScript 的 .addEventListener() 却不行?

问题描述

我需要收听 WooCommerce 的自定义事件,例如wc_fragment_refreschedadded_to_cart。但是,当通过本机为这些事件创建侦听器时,addEventListener什么也没有发生。但是 jQuery 的.on()工作正常。

在职的:

jQuery(document.body).on('wc_fragments_refreshed', function() {
  console.log("hehey!");
});

不工作:

document.body.addEventListener('wc_fragments_refreshed', function() {
  console.log("hoho!");
});

有谁知道为什么本地监听器不起作用?

标签: javascriptjquerywoocommerceevent-handlingdom-events

解决方案


不同之处在于addEventListener()不监听由 jQuery 触发的事件。要引发该事件处理程序,您需要使用dispatchEventon document.body

下面是一个例子。请注意,jQuery 会触发两次,因为它确实处理了两个事件触发器。

// jQuery
$(document.body).on('wc_fragments_refreshed', function() {
  console.log("jQuery handled the event");
}).trigger('wc_fragments_refreshed');

// Native
document.body.addEventListener('wc_fragments_refreshed', function() {
  console.log("POJS handled the event");
});
document.body.dispatchEvent(new Event('wc_fragments_refreshed'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>


推荐阅读