簡體   English   中英

如何確保在所有其他附加的單擊處理程序之后執行特定的單擊事件處理程序?

[英]How can I ensure a particular click event handler executes after all other attached click handlers?

我有一個元素:

<div id='myButton'>Click Me!</div>

單擊myButton ,將觸發任意數量的click事件處理程序。

例如,以下3個事件處理程序可以按以下方式(和順序)附加:

$('#myButton').click(function() { alert('First function!'); });

$('#myButton').click(function() { alert('Third function!'); });

$('#myButton').click(function() { alert('Second function!'); });

正如您可能通過晦澀的警報可以看出的那樣,事件處理程序的附加順序不一定是我希望它們觸發的順序。

僅在其他兩個單擊事件處理程序完成后,如何才能警告“第三功能”?

我嘗試過的

我嘗試通過以下方式與各個事件處理程序一起使用:

$._data($('#myButton')[0], "events" ).click;

但是我不能顯式地引用處理程序的附加順序(因此[0]可能不正確)。

我也曾嘗試使用jQuery when但是我懷疑我在樹錯了樹,因為事件處理程序已經連接,並且除非完全刪除它,否則將以這樣的順序執行。

注意:我不認為這僅僅是指定事件順序的一種情況,因為我想最后執行的功能可能不知道稍后要附加的功能,因此我無法處理據我所知,事件處理程序是一個集合。

如果您能夠設置特定的名稱空間,則可以使用以下代碼段:

$('#myButton').click(function() { alert('First function!'); });
$('#myButton').on("click.last", function() { alert('Third function!'); });
$('#myButton').click(function() { alert('Second function!'); });

var clicks = $._data($('#myButton')[0], "events" ).click;    

$.each(clicks, function(i, evt){
    if(evt.namespace === "last") {
        clicks.splice(clicks.length - 1, 0, clicks.splice(i, 1)[0])
    }
});

--DEMO--

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM