使用:
$('#foo').data('events').click
我们能够访问添加到元素'#foo'的点击处理程序的迭代对象,但只有当它们添加了.bind()
时有没有办法让添加了.live()的事件的处理程序?
有没有其他方法可以知道元素是否分配了点击处理程序?
答案 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