据我记忆,在纯W3C事件模型中(也就是说,使用addEventListener),无法保证按照附加的顺序调用事件处理程序。
jQuery事件模型怎么样?我可以依赖附加事件的顺序吗? 回答时要小心,因为实际上这里有三个选项,而不是两个:
答案 0 :(得分:5)
如果您通过jQuery附加处理程序,它们将按照它们附加的顺序触发。这在bind
method:
当事件到达元素时,将触发绑定到该元素的该事件类型的所有处理程序。如果注册了多个处理程序,它们将始终按照绑定的顺序执行。执行完所有处理程序后,事件将沿着正常的事件传播路径继续。
你是正确的,DOM Events规范没有定义事件处理程序的任何顺序(link),实际上大多数浏览器都是单向的,IE是另一种。保证顺序是jQuery为你做的事情(通过每个元素每个事件只附加一个处理程序 - 它自己的 - 然后自己调度到通过jQuery附加的真实处理程序)。当然,这意味着没有定义jQuery附加处理程序作为块与以另一种方式附加的处理程序相关的顺序。