如果我将两个事件侦听器注册到同一个事件目标。将首先调用哪个事件处理程序?
例:
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 规范中找不到答案。
DOM 级别 3 事件
粗体强调以回答问题(通过w3c规范:http://www.w3.org/TR/DOM-Level-3-Events/#event-phase)
我首先,实施必须确定当前目标。这必须是部分传播路径中的下一个挂起事件目标,从第一个目标开始。从事件侦听器的角度来看,这必须是侦听器已注册的事件目标。
接下来,实现必须确定当前目标的候选事件侦听器。这必须是已按注册顺序在当前目标上注册的所有事件侦听器的列表。[HTML5] 定义通过事件处理程序属性注册的侦听器的顺序。一旦确定,不得更改候选事件侦听器;添加或删除侦听器不会影响当前目标的候选事件侦听器。
最后,实现必须按顺序处理所有候选事件处理程序,并在满足以下所有条件时触发每个处理程序...
个人一直依赖这种行为,我还没有看到现代浏览器的行为与规范描述的不同。