Sprawdź czy zdarzenie istnieje na elemencie [duplikat]

to pytanie ma już odpowiedzi tutaj : jQuery find events handlers registered with a object (16 odpowiedzi) Zamknięty 5 lat temu .

Czy jest sposób na sprawdzenie czy w jQuery istnieje Zdarzenie? Pracuję nad wtyczką, która używa niestandardowych zdarzeń przestrzeni nazw, i chciałbym być w stanie sprawdzić, czy zdarzenie jest związane z elementem, czy nie.

Author: Brian Tompsett - 汤莱恩, 2009-10-03

8 answers

$('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
});

Możesz sprawdzić, podając odniesienie do obiektu (ale nie obiekt jQuery ) do $.danych, a dla drugiego argumentu feed 'events' i zwróci obiekt wypełniony wszystkimi zdarzeniami, takimi jak 'click'. Można zapętlić ten obiekt i sprawdzić, co robi Obsługa zdarzenia.

 144
Author: meder omuraliev,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-10-03 23:08:16

Możesz użyć:

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

Aby upewnić się, że wszystkie zdarzenia click są odłączone, dołącz swoje wydarzenie

 89
Author: Toni,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-01-25 19:16:21

Aby sprawdzić zdarzenia na elemencie:

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

Zauważ, że będzie to działać tylko z bezpośrednimi programami obsługi zdarzeń, jeśli używasz $(document).po włączeniu ("event-name"," JQ-selector", function() { //logic}), będziesz chciał zobaczyć funkcję getEvents na dole tej odpowiedzi

Na przykład:

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

Lub

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

Pełny Przykład:

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

Pełniejszy sposób sprawdzania, który obejmuje dynamiczne słuchacze, zainstalowane z $(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;
}

Przykładowe użycie:

getEvents($('#myElemId')[0])
 46
Author: Tom G,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-30 15:37:13

Użyj jQuery filtr zdarzeń

Możesz go używać w ten sposób

$("a:Event(click)")
 28
Author: Fareed Alnamrouti,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-16 04:38:26

Napisałem wtyczkę o nazwie hasEventListener co dokładnie tak robi.

Mam nadzieję, że to pomoże.

 5
Author: Sebastien P.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-02-06 11:30:45

Poniższy kod dostarczy Ci wszystkie zdarzenia kliknięcia na danym selektorze:

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

Można iterację nad nim za pomocą każdego or for ex. sprawdź długość walidacji jak:

jQuery(selector).data('events').click.length
Myślałem, że to komuś pomoże. :)
 3
Author: rohtakdev,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-07-13 00:12:17

Ta praca dla mnie to pokazanie obiektów i rodzaju zdarzenia, które miało miejsce.

    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
    });
 0
Author: Jagtar Singh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-14 12:54:27

Skończyłem robiąc to

typeof ($('#mySelector').data('events').click) == "object"
 -1
Author: Gargamel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-02-14 14:00:14