2009-11-13 67 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. 
    } 
} 
相关问题