列出元素的所有绑定(使用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); });