【问题标题】:Why firing a defined event with dispatchEvent doesn't obey the bubbling behavior of events?为什么用 dispatchEvent 触发定义的事件不遵守事件的冒泡行为?
【发布时间】:2014-05-27 17:14:10
【问题描述】:

我对下面的脚本感到困惑:

var event = new Event('shazam');

document.body.addEventListener('shazam',function(){
    alert('body');
});

document.addEventListener('shazam',function(){
    alert('document');
});

window.addEventListener('shazam',function(){
    alert('window');
});

document.body.dispatchEvent(event);

当我在浏览器上运行此脚本时,我只会收到 alert('body'); 事件。 但是如果我将 addEventListener 的捕获参数(第三个可选参数)设置为 true,则所有警报都会按应有的顺序捕获。

为什么 shazam 事件 没有冒泡?

【问题讨论】:

  • 创建一个CustomEvent而不是Event并将true作为第二个参数(canBubble参数)传递
  • 该属性似乎不叫'canBubble',它是'bubbles'。

标签: javascript events event-bubbling dispatchevent


【解决方案1】:

您需要将bubbles属性设置为true,并且在构建过程中必须这样做:

var event = new Event('shazam', { bubbles: true });

或者使用 initEvent 的旧方法,将 true 作为第二个参数传递以允许冒泡:

event.initEvent('shazam', true);

MDN Doc

【讨论】:

猜你喜欢
  • 2023-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-14
  • 2012-07-02
  • 1970-01-01
  • 1970-01-01
  • 2011-02-23
相关资源
最近更新 更多