19

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

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 事件没有冒泡?

4

1 回答 1

37

您需要将该bubbles属性设置为true,并且您必须在构建过程中执行此操作:

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

或旧方式initEvent,将 true 作为第二个参数传递以允许冒泡:

event.initEvent('shazam', true);

MDN 文档

于 2014-04-13T21:12:19.617 回答