【问题标题】:js event listener & jquery event trigger not being friendsjs 事件监听器和 jquery 事件触发器不是朋友
【发布时间】:2015-09-04 04:40:27
【问题描述】:

我正在努力将我们的一些代码库从 jquery 中转换出来。在我们参加活动之前,一切都很顺利。我们有很多带有 jquery 的命名空间代码,因此对于 现在,我们不会将 trigger 函数调用从 jquery 中转换出来。但是,我们正在尝试使用 js 事件侦听器。这是自定义事件的问题:

window.addEventListener("testevent", function(e){
 console.log("js fired"); // this doesn't log, but it should!
});

$(window).on("testevent", function(e){
 console.log("jquery listener fired"); // this logs fine, like it should
});

// trigger the custom event with jQuery
$(window).trigger("testevent");

如果我在控制台中运行上面的代码,我会得到一个 jquery 监听器的日志,但不是监听器。有谁知道为什么会这样?

【问题讨论】:

标签: javascript jquery javascript-events


【解决方案1】:

jQuery 自定义事件旨在用于执行抽象和简化,或者为某些称为 click 的事件提供更多意义。

此外,这些自定义事件是由 jQuery 触发的,只能被jQuery.on 监听。 DOM 事件侦听器将侦听 DOM 事件(即由 W3C 标准定义的事件)。

【讨论】:

    【解决方案2】:

    根据documentation.trigger() 执行带有相应事件的任何事件处理程序。它还说.trigger() 仅模拟一个事件,并不能完美地复制自然发生的事件。

    如果您使用window.dispatchEvent(new Event("testevent")) 触发真实事件,您会发现它们都有效。

    【讨论】:

      【解决方案3】:

      Similar question answered here

      jQuery 事件比原生事件高一个级别。触发假货 一个 jQuery 事件。

      【讨论】:

      • 当一个 SO 问题是另一个 SO 问题的骗局时,应关闭该骗局。回答说这是一个骗子并带有指向该骗子的链接会变得很混乱。
      • 如何关闭它?
      • 如果您作为 SO 用户拥有足够的权限,您可以通过点击问题下方的“关闭”来添加投票以关闭。
      猜你喜欢
      • 1970-01-01
      • 2014-08-30
      • 2016-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-13
      • 1970-01-01
      • 2015-11-22
      相关资源
      最近更新 更多