【问题标题】:How to create a non cancellable event with jQuery?如何使用 jQuery 创建不可取消的事件?
【发布时间】:2022-06-10 20:27:34
【问题描述】:

我有一个用于多个安装的发布/订阅框架。 该框架使用jQuery().trigger()jQuery().on() 并且在大多数安装中都能正常工作。

但是,有些安装会导致系统崩溃,可能是因为某些代码停止了传播。

使用纯 JavaScript,我可以创建不可取消的事件,如下所示:

const myEvent = new Event("customLoad", {cancelable: false})
document.dispatchEvent(myEvent)

如果可能的话,我想继续使用 jQuery。有没有办法以某种方式使 jQuery 事件不可取消?

我试过.triggerHandler()。但它并没有像我的情况那样冒泡。

所以在我的情况下,我像这样使用 pub/sub:

jQuery(document).trigger("customLoad")

jQuery(window).on("customLoad")

有没有可能是一些stopPropagation() 在干扰? 简单的解决方案是将window 更改为document in jQuery(window).on("customLoad")

编辑:

我发现了问题所在。有问题的 WordPress 网站的主题开发人员再次加载 jQuery,即使 WordPress 已经加载了当前版本的 jQuery。在我的代码注册事件后,主题会加载 jQuery。

我不确定在注册事件后再次加载 jQuery 时会发生什么。但我猜有些引用会被覆盖。

【问题讨论】:

  • 我认为您可能会混淆stopPropagation()preventDefault(),我认为事件的可取消状态不会影响该事件是否可以传播到父元素。
  • @DBS:我刚刚玩过domevents.dev,它发现了相同的结果。如果停止传播,则无法克服使事件不可取消的问题。所以没有办法解决stopPropagation()
  • 如果不知道你的代码/事件做了什么,很难给出任何详细的例子,但是:如果你在它被触发的元素上监听事件(而不是,例如document)它赢了'无需传播即可到达您的侦听器,并且不应受到附加到父元素的侦听器的影响。
  • 那个事件document,就像上面的例子一样。
  • 我刚刚添加了更多上下文。简单的解决方案是将window 中的document 更改为jQuery(window).on("customLoad") 吗?

标签: jquery


猜你喜欢
  • 2010-11-23
  • 2022-12-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-03
  • 2011-09-20
  • 2023-03-23
  • 2014-03-10
相关资源
最近更新 更多