检查元素上是否存在事件[重复]

2020/10/21 04:41 · javascript ·  · 0评论

有没有一种方法可以检查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进行检查,并为第二个参数馈送“事件”,这将返回一个填充有所有事件(例如“点击”)的对象。您可以遍历该对象并查看事件处理程序的作用。

您可以使用:

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

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

要检查元素上的事件:

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

使用jQuery事件过滤器

你可以这样使用

$("a:Event(click)")

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

希望这可以帮助。

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

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

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

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

以为这会帮助某人。:)

对我来说,这项工作正在显示发生的事件的对象和类型。

    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"
本文地址:http://javascript.askforanswer.com/jianchayuansushangshifoucunzaishijianzhongfu.html
文章标签: ,   ,   ,  
版权声明:本文为原创文章,版权归 javascript 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!