检查元素是否存在事件

有没有办法来检查一个事件是否存在于jQuery? 我正在使用自定义命名空间事件的插件,并希望能够检查事件绑定到一个元素或不。

 $('body').click(function(){ alert('test' )}) var foo = $.data( $('body').get(0), 'events' ).click // you can query $.data( object, 'events' ) and get an object back, then see what events are attached to it. $.each( foo, function(i,o) { alert(i) // guid of the event alert(o) // the function definition of the event handler }); 

您可以通过将对象引用(不是jQuery对象)提供给$ .data来进行检查,而对于第二个参数提要“events”,则会返回一个填充了所有事件(如“click”)的对象。 你可以遍历这个对象,看看事件处理程序是干什么的。

您可以使用:

 $("#foo").unbind('click'); 

确保所有点击事件都是未绑定的,然后附加您的事件

使用jquery事件filter

你可以像这样使用它

 $("a:Event(click)") 

以下是如何检查元素是否存在任何事件

 <html> <head> <script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.min.js" type="text/javascript"></script> <script> $(function() { $("#textDiv").click(function() { //Event Handling }); var events = $._data(document.getElementById('textDiv'), "events"); var hasEvents = (events != null); }); </script> </head> <body> <div id="textDiv">Text</div> </body> </html> 

我写了一个名为hasEventListener的插件,正是这样做的。

希望这可以帮助。

下面的代码将为您提供给定select器上的所有点击事件:

 jQuery(selector).data('events').click 

你可以使用each或ex遍历它。 检查validation的长度,如:

 jQuery(selector).data('events').click.length 

认为这将有助于某人。 🙂

我在这里回答了类似的问题: hasHandlers()帮手

使用jQuery> = v1.11.0

这个工作对我来说是显示事件发生的对象和types。

  var foo = $._data( $('body').get(0), 'events' ); $.each( foo, function(i,o) { console.log(i); // guide of the event console.log(o); // the function definition of the event handler }); 

我结束了这样做

 typeof ($('#mySelector').data('events').click) == "object"