21

可能重复:
测试事件处理程序是否绑定到 jQuery 中的元素

尝试执行以下操作(链接是 'a' 标记的 jQuery 对象):

 link.data("events") //undefined even if link has event handlers
 jQuery.data(link, 'events') //undefined always also
 jQuery._data(link, 'events') //undefined always also

使用 jquery-1.8.3

那么,如何检查元素是否有点击处理程序?

4

1 回答 1

37

您可以使用jQuery._data来检查事件。第一个参数应该是对 HTML 元素的引用,而不是 jQuery 对象。

var ev = $._data(element, 'events');
if(ev && ev.click) alert('click bound');

示例如下。

$(function(){
    $('#test').click(function(){
        // NOTE: this below is refering to the HTML element, NOT the jQuery element
        var ev = $._data(this, 'events');
        if(ev && ev.click) alert('click bound to this button');
    });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<button id="test">Click me to check for click handlers</button>

另请注意,这种检查事件的方法仅在通过 jQuery 绑定事件时才有效。如果事件是通过element.attachEventListener,或任何其他非 jQuery 方式绑定的element.onclick<a onclick="doStuff()">这将不起作用。如果您适合这艘船,请查看此答案

于 2012-12-28T15:57:09.037 回答