处理事件时我可以依赖附加订单吗?

时间:2012-01-19 11:46:40

标签: javascript jquery addeventlistener

据我记忆,在纯W3C事件模型中(也就是说,使用addEventListener),无法保证按照附加的顺序调用事件处理程序。

jQuery事件模型怎么样?我可以依赖附加事件的顺序吗? 回答时要小心,因为实际上这里有三个选项,而不是两个:

  • 您不能依赖附加事件的顺序,正如您可以从jQuery代码中看到的那样。
  • 您可以依赖在当前实施中附加事件的顺序,但实际上,没有人会告诉您将来会一直支持此事,因为订单保留实​​际上是无意的。
  • 你可以依赖附加事件的顺序 - 这是自愿实现的,并且最有可能永远与我们在一起,因为它是直观的,并帮助我们使用一些常见的模式,如资源预初始化等。

1 个答案:

答案 0 :(得分:5)

如果您通过jQuery附加处理程序,它们将按照它们附加的顺序触发。这在bind method

中有记录
  

当事件到达元素时,将触发绑定到该元素的该事件类型的所有处理程序。如果注册了多个处理程序,它们将始终按照绑定的顺序执行。执行完所有处理程序后,事件将沿着正常的事件传播路径继续。

你是正确的,DOM Events规范没有定义事件处理程序的任何顺序(link),实际上大多数浏览器都是单向的,IE是另一种。保证顺序是jQuery为你做的事情(通过每个元素每个事件只附加一个处理程序 - 它自己的 - 然后自己调度到通过jQuery附加的真实处理程序)。当然,这意味着没有定义jQuery附加处理程序作为块与以另一种方式附加的处理程序相关的顺序。