在我记忆中,在纯W3C事件模型中(也就是说,使用addEventListener),无法保证将按照已附加的顺序调用事件处理程序.
怎么样的jQuery事件模型.我可以依赖附加事件的顺序吗?
回答时要小心,因为实际上这里有三个选项,而不是两个:
>您不能依赖于附加事件的顺序,正如您可以从jQuery代码中看到的那样.
>你可以依赖于在当前实现中附加事件的顺序,但实际上,没有人会告诉你将来会一直支持这个,因为订单保留实际上是无意的.
>你可以依赖附加事件的顺序 – 这是自愿实现的,并且很可能永远与我们在一起,因为它是直观的并且帮助我们使用一些常见的模式,比如资源预初始化等等.
解决方法:
如果你通过jQuery附加处理程序,它们将按照它们附加的顺序被触发.这在bind
method上有记录:
When an event reaches an element, all handlers bound to that event type for the element are fired. If there are multiple handlers registered, they will always execute in the order in which they were bound. After all handlers have executed, the event continues along the normal event propagation path.
你是正确的,DOM事件规范没有定义事件处理程序的任何顺序(link),事实上大多数浏览器都是单向的,IE是另一种.保证顺序是jQuery为你做的事情(通过每个元素每个事件只附加一个处理程序 – 它自己的 – 然后自己调度到通过jQuery附加的真实处理程序).当然,这意味着没有定义jQuery附加处理程序作为块被调用的顺序与以另一种方式附加的处理程序相关.