[英]Click event executes both click and hover event handler even when the click event handler unbinds all handlers
[英]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])
}
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.