我已阅读 https://developer.mozilla.org/en/DOM/element.addEventListener 上的文章,但无法理解 useCapture
属性。定义有:
如果为真,useCapture 表示用户希望启动捕获。启动捕获后,指定类型的所有事件将被分派到已注册的侦听器,然后再分派到 DOM 树中它下面的任何 EventTargets。通过树向上冒泡的事件不会触发指定使用捕获的侦听器。
在此代码中,父事件在子事件之前触发,因此我无法理解其行为。文档对象具有 usecapture true,子 div 具有 usecapture 设置为 false,并且遵循文档 usecapture。那么为什么文档属性优于子对象。
function load() {
document.addEventListener("click", function() {
alert("parent event");
}, true);
document.getElementById("div1").addEventListener("click", function() {
alert("child event");
}, false);
}
<body onload="load()">
<div id="div1">click me</div>
</body>
原文由 user26732 发布,翻译遵循 CC BY-SA 4.0 许可协议
事件可以在两种情况下被激活:开始时(“捕获”)和结束时(“泡泡”)。事件按照它们定义的顺序执行。比如说,你定义了 4 个事件监听器:
日志消息将按以下顺序显示:
2
(首先定义,使用capture=true
)4
(定义第二个使用capture=true
)1
(第一个定义事件capture=false
)3
(第二个定义事件capture=false
)