編輯:這可能是有用的,但可能無法按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()
約束,且事件發生時,下一次會火第一的功能,除非你以某種方式明確解除綁定。
而且更容易維護,而不是在不同的地方定義好幾個(不好意思!) – Wiseguy 2011-04-22 15:29:58
問題是我不知道有多少事件會被綁定到#something元素。它可以從1到x,並且我希望確保一個特定的執行總是在最後執行,無論事件的順序如何。 – 2011-04-22 15:53:23
@Goran:_「問題是我不知道會發生多少事件被綁定到#something元素。「_爲什麼不呢?事件處理程序應該彼此獨立。無論如何,最大限度地減少聽衆的數量是一個好主意。 – 2011-04-22 15:56:22