有没有办法列出jQuery元素上的所有绑定? jQuery的bind()似乎只是附加它们,我没有找到一个确实得到绑定的jQuery函数。
答案 0 :(得分:30)
这个答案适用于jQuery版本< 1.8 强>
最好的方法,可能是FireFox的FireQuery
插件。真的是一个很好的工具。
如果您希望/需要完成“in-code”,请使用jQuerys .data('events')
对象。
$.each($('#element').data('events'), function(i, e) {
console.log(i, e);
});
通过jQuery绑定的所有事件都会被推送到该对象中。当然,可能还有其他事件处理程序,如on
- 任何事情,你必须明确检查。
参考:FireQuery
答案 1 :(得分:19)
从jQuery 1.8开始,新语法是:
$.each($._data("#element", "events"), function(i, e) {
console.log(i, e);
});
请注意,它是$._data("#element"
NOT $.data($("#element")
,因此如果您需要使用$myJQuerySelector[0]
,请务必展开您的选择器。
答案 2 :(得分:13)
必须有一种方法可以以编程方式进行,并且有人已将其弄清楚并将其放入可视化工具中。
我不确定这是否能解答您的问题,但我发现确定这些绑定的最佳工具称为Visual Event(不是一个好名字,实际上很难谷歌)。
这适用于Firefox和Chrome,Chromium,Safari等。在不同的浏览器中,某些绑定问题可能会有所不同。覆盖所有基础是很好的。
如果你有一个叠加层并需要在一个元素下面,你可以双击任何绑定来隐藏它以进入你需要查看的事件。
答案 3 :(得分:5)
基于其他答案和评论。
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 Realeased
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
中删除
答案 4 :(得分:2)
以下代码查看一个元素及其所有子元素和console.logs任何绑定事件。
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')
答案 5 :(得分:0)
我无法让格林的答案奏效。从jQuery 1.8 find event handlers开始,我认为该示例应更改为
var obj = $('#element');
$.each($._data(obj[0], "events"), function(i, e) {
console.log(i, e);
});