事件侦听器到首先调用的同一事件目标

Event listeners to the same event target which is called first

本文关键字:事件 目标 侦听器 调用      更新时间:2023-09-26

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

例:

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] 定义通过事件处理程序属性注册的侦听器的顺序。一旦确定,不得更改候选事件侦听器;添加或删除侦听器不会影响当前目标的候选事件侦听器。

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

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