如何对使用 jQuery 绑定的事件进行排序

2022-08-30 02:12:50

假设我有一个Web应用程序,它有一个可能包含4个脚本块的页面 - 我编写的脚本可能在其中一个块中找到,但我不知道哪个是由控制器处理的。

我将一些事件绑定到按钮,但我发现它们有时以我意想不到的顺序执行。onclick

有没有办法确保秩序,或者你过去如何处理这个问题?


答案 1

如果顺序很重要,则可以创建自己的事件,并将回调绑定到由其他回调触发时触发这些事件。

$('#mydiv').click(function(e) {
    // maniplate #mydiv ...
    $('#mydiv').trigger('mydiv-manipulated');
});

$('#mydiv').bind('mydiv-manipulated', function(e) {
    // do more stuff now that #mydiv has been manipulated
    return;
});

至少是这样的东西。


答案 2

Dowski的方法很好,如果你所有的回调总是存在,并且你对它们相互依赖感到满意。

但是,如果您希望回调彼此独立,则可以利用冒泡并将后续事件作为委托附加到父元素。父元素上的处理程序将在元素上的处理程序之后触发,一直持续到文档。这非常好,因为您可以使用 、 等跳过处理程序并取消或取消操作。event.stopPropagation()event.preventDefault()

$( '#mybutton' ).click( function(e) { 
    // Do stuff first
} );

$( '#mybutton' ).click( function(e) { 
    // Do other stuff first
} );

$( document ).delegate( '#mybutton', 'click', function(e) {
    // Do stuff last
} );

或者,如果您不喜欢这样,可以使用Nick Leaches bindLast插件强制最后绑定事件:https://github.com/nickyleach/jQuery.bindLast

或者,如果您使用的是jQuery 1.5,则还可以对新的延迟对象执行一些聪明的操作。