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

sha*_*unc 4 javascript jquery addeventlistener

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

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

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

T.J*_*der 5

如果你通过jQuery附加处理程序,它们将按照它们附加的顺序被触发.这在bind方法中记录:

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

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