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

时间:2010-11-09 20:57:47

标签: javascript jquery binding

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

6 个答案:

答案 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],请务必展开您的选择器。

Read more...

答案 2 :(得分:13)

必须有一种方法可以以编程方式进行,并且有人已将其弄清楚并将其放入可视化工具中。

我不确定这是否能解答您的问题,但我发现确定这些绑定的最佳工具称为Visual Event(不是一个好名字,实际上很难谷歌)。

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

如果你有一个叠加层并需要在一个元素下面,你可以双击任何绑定来隐藏它以进入你需要查看的事件。

alt text

答案 3 :(得分:5)

基于其他答案和评论。

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 Realeased

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

中删除

答案 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);
});