jQuery事件链 - 从堆栈到队列

时间:2009-03-17 18:29:50

标签: jquery events

将按顺序执行'first,second'。我需要最后一次执行。

function first(){ alert('first') }
function second(){ alert('second') }
$('input').click(first).click(second);

1 个答案:

答案 0 :(得分:3)

简短回答:你不能这样做。

虽然在实践浏览器中按照分配的顺序运行事件,但您无法相信他们将始终执行此操作。另请注意,取消取决于您使用的事件模型。在级别1(onclick =“...”)中,取消事件气泡立即生效,不再运行其他处理程序。对于jQuery使用的Level 2(Element.addEventListener),情况并非如此,其中在元素上注册的所有错误总是在传播停止之前触发。

在我看来,如果你正在编写依赖于多个处理函数的东西来顺序运行但却无法控制分配顺序,那么你需要重新考虑你的方法。

但是 - 如果必须这样做 - 您可以取消绑定并重新分配所需元素上的所有事件,以获得所需的序列。您可以使用$.data( someelement, 'events' )获取给定元素上的事件列表,然后取消/重新分配它们,并将首选事件推送到前面。