如何对使用 jQuery 绑定的事件进行排序
2022-08-30 02:12:50
假设我有一个Web应用程序,它有一个可能包含4个脚本块的页面 - 我编写的脚本可能在其中一个块中找到,但我不知道哪个是由控制器处理的。
我将一些事件绑定到按钮,但我发现它们有时以我意想不到的顺序执行。onclick
有没有办法确保秩序,或者你过去如何处理这个问题?
假设我有一个Web应用程序,它有一个可能包含4个脚本块的页面 - 我编写的脚本可能在其中一个块中找到,但我不知道哪个是由控制器处理的。
我将一些事件绑定到按钮,但我发现它们有时以我意想不到的顺序执行。onclick
有没有办法确保秩序,或者你过去如何处理这个问题?
如果顺序很重要,则可以创建自己的事件,并将回调绑定到由其他回调触发时触发这些事件。
$('#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;
});
至少是这样的东西。
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,则还可以对新的延迟对象执行一些聪明的操作。