有没有一种方法可以列出jQuery元素上的所有绑定? jQuery的bind()似乎只能附加它们,并且我没有找到一个获取绑定的jQuery函数。
本答案适用于jQuery版本 < 1.8
最好的方法可能是使用FireFox的FireQuery
插件。真的是一个很不错的工具。
如果你想要/需要在代码中实现,可以使用jQuery的.data('events')
对象。
$.each($('#element').data('events'), function(i, e) {
console.log(i, e);
});
所有通过jQuery绑定的事件都会被推入该对象中。当然,可能还有其他的事件处理程序,比如on
-anything,你需要显式地进行检查。
参考资料: FireQuery
从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等浏览器。某些绑定问题可能在不同的浏览器中会有所不同。最好涵盖所有情况。
如果您有一个遮罩并且需要获取元素下面的内容,则可以双击任何绑定以将其隐藏,以便查看所需的事件。
根据其他答案和评论。
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发布
var elementSelector = '#elementid';
$(elementSelector).bind('click.test', function(){}); // For testing.
$.each($(elementSelector).data('events'), function(i, e) {
console.log(i, e);
});
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')
我无法让Grinn的答案起作用。从jQuery 1.8 find event handlers中,我认为示例应该更改为
var obj = $('#element');
$.each($._data(obj[0], "events"), function(i, e) {
console.log(i, e);
});
jQuery._data( elem, "events" );
,其中elem
是HTML元素(而非jQuery对象)。 - Richard Rout$("#elem").get(0)
,它会返回 HTML 元素。 - fdelia