我对以下脚本感到困惑:

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

最佳答案

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

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

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

event.initEvent('shazam', true);

MDN Doc

08-03 17:42