检查元素是否存在事件
有没有办法来检查一个事件是否存在于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"