JavaScript中的事件处理程序按顺序调用吗?

47
如果我为单个DOM元素的单个事件附加多个事件处理程序,那么这些事件处理程序是否保证按照它们添加的顺序被调用?或者说我不应该依赖这种行为?
1个回答

36

使用DOM3,这已经改变!而DOM level 2 events specification规范则说明

当事件到达目标时,任何在EventTarget上注册的事件侦听器都会被触发。虽然所有EventListeners都保证会被任何接收到该EventTarget的事件所触发,但没有规定它们将以何种顺序接收与其他EventListeners相比的事件。

DOM level 3 events specification目前规定:

实现必须确定当前目标的待选事件监听器。 这必须是所有已在当前目标上注册的事件监听器列表按其注册顺序排序HTML5 定义了通过事件处理程序属性注册的监听器的排序方式。 [...]

最后,实现必须按顺序处理所有候选的事件处理程序...

然而,我无法在DOM 4 draft中找到对此行为的参考。


假设这是来自HTML5的内容,那么现有的浏览器已经支持了,你认为呢? - thomasrutter
1
@thomasrutter:是的,基本上是这样——他们只标准化他们实现的内容。 - Bergi
3
答案似乎已经过时了。当前的DOM Level 3规范不再包括关于候选事件监听器的引用段落,这是不幸的。 - Tomasz P. Szynalski

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接