jQuery中的绑定事件总是在最后执行

有没有办法将事件绑定到某个对象,并确保其中一个事件将始终执行?

$('#something').bind('click', function () { // do something first }); $('#something').bind('click', function () { // do this always last }); $('#something').bind('click', function () { // do this after first one }); 

谢谢!

您可以一次性绑定所有处理程序:

 $('#something').click(function () { first(); second(); third(); }); 

这带来了额外的好处,比绑定3个独立的听众更有效/轻量级。

编辑:这可能很有用,但可能无法解决OP的问题。 触发one处理程序的处理程序不会附加到当前处理程序队列的末尾,它只在后续事件上运行。

对于未来的读者,您可以通过使用one()代理处理程序来实现此目的。

 $('.some-class').on('anevent', function(evt) { $(this).one(evt.type, function(evt) { //this code will fire after all other handlers for this event, except others that are proxied the same way console.log(evtO == evt, 'same event'); if (evt.isDefaultPrevented())//can check signals to see whether you should still handle this event return; //do stuff last }); }) 

后来在其他地方:

 $('.some-class').on('anevent', function(evt) { //do stuff first evt.preventDefault();//can signal to prevent the proxied function. could use evt.stopPropagation() instead }) 

一个警告是,如果后来的处理程序使用return false; 或者stopImmediatePropagation() ,与one()绑定的函数将在下次发生该事件时首先触发,除非您以某种方式明确解除绑定。