如果我将两个事件侦听器注册到同一个事件目标。首先调用哪个事件处理程序?
示例:
document.addEventListener("click", function() {
// do something 1
}, true); // using the capturing phase
document.addEventListener("click", function() {
// do something 2
}, true); // using the capturing phase
我没有在w3c规范中找到答案。
答案 0 :(得分:1)
大胆的重点是回答问题(通过w3c规范:http://www.w3.org/TR/DOM-Level-3-Events/#event-phase)
首先,实施必须确定当前目标。这必须是部分传播路径中的下一个待处理事件目标,从第一个开始。从事件侦听器的角度来看,这必须是侦听器已在其上注册的事件目标。
接下来,实现必须确定当前目标的候选事件侦听器。这必须是已在其注册顺序的当前目标上注册的所有事件侦听器的列表。 [HTML5]定义通过事件处理程序属性注册的侦听器的顺序。确定后,不得更改候选事件监听器;添加或删除侦听器不会影响当前目标的候选事件侦听器。
最后,实现必须按顺序处理所有候选事件处理程序,并在满足以下所有条件时触发每个处理程序...
我个人总是依赖这种行为,而且我没有看到现代浏览器的行为与规范所描述的不同。