列出元素的所有绑定(使用jQuery)

有没有办法列出jQuery元素上的所有绑定? jQuery的bind()似乎只附加他们,我没有find一个jQuery函数,得到的绑定。

这个答案适用于jQuery版本<1.8

最好的方法,可能是FireFox的FireQuery插件。 真的是一个整洁的工具。

如果你想/需要完成“in-code”,使用jQuerys .data('events')对象。

 $.each($('#element').data('events'), function(i, e) { console.log(i, e); }); 

所有通过jQuery绑定的事件都被推送到该对象中。 当然,也可能有其他的事件处理程序on比如说,你必须明确地检查。

参考: FireQuery

从jQuery 1.8开始,新的语法是:

 $.each($._data("#element", "events"), function(i, e) { console.log(i, e); }); 

请注意,它是$._data("#element" NOT $.data($("#element") ,因此如果您需要使用$myJQuerySelector[0] ,请务必解开您的select器。

阅读更多…

必须有一种方法来编程,而有人已经弄明白了,并把它放在一个可视化的工具中。

我不确定这是否回答你的问题,但我发现确定这些绑定的最佳工具被称为视觉事件 (不是一个伟大的名字,实际上很难谷歌)。

这适用于Firefox和Chrome,Chromium,Safari等。在不同的浏览器中,一些绑定问题可能会有所不同。 覆盖所有的基地是很好的。

如果你有一个覆盖层,并且需要在一个元素的下面,你可以双击任何绑定来隐藏它,以便到达需要查看的事件。

替代文字

根据其他答案和评论。

JQuery 1.8及以上

 var elementSelector = '#element-id'; $(elementSelector).bind('click.test', function(){}); // For testing. $.each($._data($(elementSelector)[0], 'events'), function(i, e) { console.log(i, e); }); 

$._data()的第一个参数不是jquery对象。

请注意,这不是一个受支持的公共接口 ; 实际的数据结构可能从版本到版本不兼容。 – jquery 1.8发售


在JQuery 1.8下面

 var elementSelector = '#elementid'; $(elementSelector).bind('click.test', function(){}); // For testing. $.each($(elementSelector).data('events'), function(i, e) { console.log(i, e); }); 

在版本1.6中,jQuery将内部数据与用户数据分开,以防止名称冲突。 然而,有些人正在使用内部无证“事件”数据结构,所以我们仍然可以通过.data()来检索。 这个在1.8中被删除了.- Jquery 1.8 Realeased

以下代码查看元素及其所有子元素和console.log中的任何绑定事件。

 function findMyEvents(me) { if (typeof $._data($(me)[0], 'events') !== "undefined") { console.log($(me)[0]) console.log($._data($(me)[0], 'events')) $._data($(me)[0], 'events') }; for (var i = 0; i < $(me).children().length; i++) { findMyEvents($(me).children()[i]) } } findMyEvents('body') 

我不能让格林的答案工作。 从jQuery 1.8find事件处理程序 ,我认为应该将该示例更改为

 var obj = $('#element'); $.each($._data(obj[0], "events"), function(i, e) { console.log(i, e); });