检测jQuery“Live”事件的处理程序

时间:2010-05-22 07:31:49

标签: javascript jquery events live handler

使用:

$('#foo').data('events').click

我们能够访问添加到元素'#foo'的点击处理程序的迭代对象,但只有当它们添加了.bind()

有没有办法让添加了.live()的事件的处理程序?

有没有其他方法可以知道元素是否分配了点击处理程序?

1 个答案:

答案 0 :(得分:3)

live个事件已添加到文档中。使用

$(document).data('events').click

上面将返回一个对象数组,其中包含有关每个绑定的单击处理程序的信息。这些对象中的每一个都有一个selector属性,其中包含与$(selector).live(.., ..)绑定时使用的选择器。

当点击#foo时,将触发与id为foo的元素匹配的任何选择器。请注意,选择器不必完全#foo即可。还有许多其他选择器可用于定位元素。例如,如果#foo<p>,那么就是实时点击处理程序,例如

$("p").live("click", function..)

也会定位#foo

这是一种方法。遍历每个对象,查看与selector属性匹配的任何元素是否包含#foo

var handlers = $(document).data('events').click;

// jQuery quirk: $.map callback takes arguments (obj, index) and
// $(..).map takes callback arguments as (index, obj)
var fooClickHandlers = $.map(handlers, function(handler) {
    if($(handler.selector).is('#foo')) {
        return handler;
    }
    return null;
});

// fooClickHandlers is a list of all handlers that will fire on #foo click