测试事件处理程序是否绑定到 jQuery 中的元素

2022-08-30 01:31:16

是否可以使用 jQuery 确定元素是否具有单击处理程序、更改处理程序或绑定到它的任何类型的事件处理程序?

此外,是否可以确定给定类型的事件有多少个单击处理程序(或任何类型的事件处理程序),以及事件处理程序中有哪些函数?


答案 1

您可以从数据缓存中获取此信息。

例如,将它们记录到控制台(firebug,ie8):

console.dir( $('#someElementId').data('events') );

或迭代它们:

jQuery.each($('#someElementId').data('events'), function(i, event){

    jQuery.each(event, function(i, handler){

        console.log( handler.toString() );

    });

});

另一种方法是您可以使用以下书签,但显然这在运行时没有帮助。


答案 2

在绑定尚不存在时将其杀死不是最佳解决方案,但似乎足够有效!第二次“单击”时,您可以确定地知道它不会创建重复的绑定。

因此,我使用die()或unbind(),如下所示:

$("#someid").die("click").live("click",function(){...

$("#someid").unbind("click").bind("click",function(){...

或在最近的jQuery版本中:

$("#someid").off("click").on("click",function(){...