检查事件元素上存在[复制]检查事件元素上存在[复制](Check if event exists o

2019-05-06 10:22发布

这个问题已经在这里有一个答案:

  • jQuery的发现与对象注册的事件处理程序 14个回答

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

Answer 1:

$('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对象虽然)至$。数据检查,并为第二个参数饲料“事件”,这将返回填充了所有的活动,如“点击”的对象。 你可以通过该对象环路,看到了事件处理程序做什么。



Answer 2:

您可以使用:

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

确保所有点击事件都unbinded,然后附上您的活动



Answer 3:

要检查一个元素上的事件:

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

请注意,这只会直接事件处理工作,如果你正在使用的$(document)。在(“事件名称”,“JQ-选择”功能(){//逻辑}),你将要看到的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>

检查更全面的方式,包括动态的听众,用$(文件)。在安装

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


Answer 4:

使用jquery事件过滤器

你可以使用它像这样

$("a:Event(click)")


Answer 5:

我写了一个叫做插件hasEventListener这正是这样做的。

希望这可以帮助。



Answer 6:

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

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

您可以使用每个或前迭代它。 检查长度如验证:

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

认为这将帮助别人。 :)



Answer 7:

我已经回答了在这里类似的问题: hasHandlers()辅助

与jQuery> = v1.11.0工作



Answer 8:

这对我的工作它显示的对象和事件的类型已经发生。

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


Answer 9:

最后我做这个

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


文章来源: Check if event exists on element [duplicate]