2009-11-13 71 views
5

正如問題所述,我需要綁定到特定元素的事件列表。是否有可能獲取綁定到jQuery元素的事件列表?

我的意思是點擊,鼠標懸停等事件綁定到該元素在DOM的加載。

(笨)例如:

$("#element").click(function() 
{ 
    //stuff 
}); 
$("#element").mouseover(function() 
{ 
    //stuff 
}); 
$("#element").focus(function() 
{ 
    //stuff 
}); 

結果:

點擊,鼠標懸停 , 焦點

+0

您是否在嘗試調試或管理已部署的解決方案? – 2009-11-13 15:00:28

回答

13

每個事件被添加到陣列。

該陣列可以使用jQuery數據的方法來訪問:

$("#element").data('events') 

要登錄一個對象Firebug的所有事件,只需鍵入:

console.log ($("#element").data('events')) 

,你會得到所有綁定的列表事件。


更新:

對於的jQuery 1.8和更高的你必須尋找到內部jQuery的數據對象:

$("#element").each(function(){console.log($._data(this).events);}); 
// or 
console.log($._data($("#element")[0]).events); 
+1

作爲新訪問者的一個提示:自jQuery [Version 1.8](http://blog.jquery.com/2011/11/08/building-a-slimmer-jquery/)以來,這個答案已經過時:「* .data( 「事件」):jQuery將其事件相關數據存儲在每個元素上的一個名爲(等待它)的事件的數據對象中,這是一個內部數據結構,所以在1.8版本中這將從用戶數據名稱空間中刪除,與同名商品衝突[...] *「。另請參見:[jQuery 1.8查找事件處理程序](http://stackoverflow.com/questions/12214654/jquery-1-8-find-event-handlers) – insertusernamehere 2013-10-04 12:51:06

+1

謝謝 - 我添加了一個註釋:) – jantimon 2013-10-04 13:01:53

2

您可以通過element.data('events');訪問它。示例:

var events = element.data('events'); 
for (var type in events) { 
    // `type` is "click", "mouseover", "change", etc. 
    for (var handler in events[type]) { 
     // `handler` is the associated function. 
    } 
} 
相關問題