【问题标题】:Event listeners to the same event target which is called first事件侦听器到首先调用的同一事件目标
【发布时间】:2013-02-01 21:48:31
【问题描述】:

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

例子:

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

【问题讨论】:

标签: javascript dom javascript-events event-handling


【解决方案1】:

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多