3

如果我将两个事件侦听器注册到同一个事件目标。哪个事件处理程序将首先被调用?

例子:

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-Level-3-Events

4

1 回答 1

1

加粗强调以回答问题(通过 w3c 规范:http ://www.w3.org/TR/DOM-Level-3-Events/#event-phase )

首先,实施必须确定当前目标。这必须是部分传播路径中的下一个未决事件目标,从第一个开始。从事件侦听器的角度来看,这必须是侦听器已注册的事件目标。

接下来,实现必须确定当前目标的候选事件侦听器。这必须是按注册顺序在当前目标上注册的所有事件侦听器的列表。[HTML5] 定义了通过事件处理程序属性注册的侦听器的顺序。一旦确定,候选事件监听器不得更改;添加或删除侦听器不会影响当前目标的候选事件侦听器。

最后,实现必须按顺序处理所有候选事件处理程序,并在满足以下所有条件时触发每个处理程序......

我个人一直依赖这种行为,并且我没有看到现代浏览器的行为与规范描述的不同。

于 2013-02-02T07:25:36.873 回答