【发布时间】:2010-11-09 20:57:47
【问题描述】:
有没有办法列出 jQuery 元素上的所有绑定? jQuery 的 bind() 似乎只是附加了它们,我没有找到一个可以获取绑定的 jQuery 函数。
【问题讨论】:
标签: javascript jquery binding
有没有办法列出 jQuery 元素上的所有绑定? jQuery 的 bind() 似乎只是附加了它们,我没有找到一个可以获取绑定的 jQuery 函数。
【问题讨论】:
标签: javascript jquery binding
此答案适用于 jQuery 版本
最好的方法,可能是 FireFox 的 FireQuery 插件。真是个不错的工具。
如果您想要/需要完成“代码内”,请使用 jQuerys .data('events') 对象。
$.each($('#element').data('events'), function(i, e) {
console.log(i, e);
});
通过 jQuery 绑定的所有事件都被推送到该对象中。当然,可能还有其他事件处理程序,例如 on-anything,您必须明确检查。
参考:FireQuery
【讨论】:
jQuery._data( elem, "events" ); 其中elem 是一个 HTML 元素(不是 jQuery 对象)
$("#elem").get(0),返回html元素。
从 jQuery 1.8 开始,新语法是:
$.each($._data("#element", "events"), function(i, e) {
console.log(i, e);
});
注意它是$._data("#element" 不是 $.data($("#element"),所以如果你需要使用$myJQuerySelector[0],请务必打开你的选择器。
【讨论】:
一定有一种方法可以以编程方式进行,并且有人已经想出来并将其放入可视化工具中。
我不确定这是否能回答您的问题,但我发现确定这些绑定的最佳工具称为 Visual Event(不是一个好名字,实际上很难用谷歌搜索)。
这适用于 Firefox 和 Chrome、Chromium、Safari 等。一些绑定问题在不同的浏览器中可能会发生不同的情况。覆盖所有的基础是很好的。
如果您有叠加层并且需要进入某个元素下方,您可以双击任何绑定以将其隐藏以访问您需要查看的事件。
【讨论】:
基于其他答案和 cmets。
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
【讨论】:
以下代码查看一个元素及其所有子元素,并在控制台记录任何绑定事件。
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.8 find event handlers,我觉得例子应该改成
var obj = $('#element');
$.each($._data(obj[0], "events"), function(i, e) {
console.log(i, e);
});
【讨论】: