检查元素上是否存在事件

有没有一种方法可以检查jQuery中是否存在事件?我正在开发一个使用自定义命名空间事件的插件,并希望能够检查事件是否绑定到元素。

284211 次浏览
$('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 ”)的对象。您可以遍历该对象并查看事件处理程序执行的操作。

使用jQuery事件过滤器

你可以这样使用它。

$("a:Event(click)")

我写了一个叫做HasEventListener的插件,它确实做到了这一点。

希望这能有所帮助。

您可以使用:

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

若要确保取消绑定所有单击事件,请附加您的事件

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

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

您可以使用each或for ex对其进行迭代。检查验证的长度,如:

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

我觉得这会对别人有帮助。

要检查元素上的事件,请执行以下操作:

var events = $._data(element, "events")

请注意,这只适用于直接事件处理程序,如果您使用的是$(document).on(“ event-name ”,“ JQ-selector ”,function(){//logic}),您将希望在此答案的底部看到getEvents函数

例如:

 var events = $._data(document.getElementById("myElemId"), "events")

 var events = $._data($("#myElemId")[0], "events")

完整示例:

<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>

更完整的检查方法,包括动态侦听器,随$(document).on一起安装

function getEvents(element) {
var elemEvents = $._data(element, "events");
var allDocEvnts = $._data(document, "events");
for(var evntType in allDocEvnts) {
if(allDocEvnts.hasOwnProperty(evntType)) {
var evts = allDocEvnts[evntType];
for(var i = 0; i < evts.length; i++) {
if($(element).is(evts[i].selector)) {
if(elemEvents == null) {
elemEvents = {};
}
if(!elemEvents.hasOwnProperty(evntType)) {
elemEvents[evntType] = [];
}
elemEvents[evntType].push(evts[i]);
}
}
}
}
return elemEvents;
}

用法示例:

getEvents($('#myElemId')[0])

我最后做了这个。

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

对我来说,这项工作是展示已经发生的事件的对象和类型。

    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
});