webentwicklung-frage-antwort-db.com.de

Überprüfen Sie, ob ein Ereignis für ein Element vorhanden ist

Gibt es eine Möglichkeit zu überprüfen, ob ein Ereignis in jQuery vorhanden ist? Ich arbeite an einem Plug-in, das benutzerdefinierte Ereignisse in Namespaces verwendet, und möchte überprüfen können, ob das Ereignis an ein Element gebunden ist oder nicht.

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

Sie können die Objektreferenz (aber nicht das jQuery-Objekt) in $ .data eingeben und für das zweite Argument 'events' eingeben. Dadurch wird ein Objekt zurückgegeben, das mit allen Ereignissen wie 'click' gefüllt ist. Sie können dieses Objekt durchlaufen und sehen, was der Ereignishandler tut.

141
meder omuraliev

Sie können verwenden:

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

um sicherzustellen, dass alle Klickereignisse nicht gebunden sind, hängen Sie Ihr Ereignis an

75
Toni

m nach Ereignissen für ein Element zu suchen:

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

Beachten Sie, dass dies nur mit direkten Event-Handlern funktioniert, wenn Sie $ (document) .on ("event-name", "jq-selector", function () {// logic}) verwenden Die Funktion getEvents steht am Ende dieser Antwort

Zum Beispiel:

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

oder

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

Vollständiges Beispiel:

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

Eine vollständigere Möglichkeit zur Überprüfung, einschließlich dynamischer Listener, die mit $ (document) .on installiert wurden.

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

Anwendungsbeispiel:

getEvents($('#myElemId')[0])
38
Tom G

benutze jquery event filter

sie können es so verwenden

$("a:Event(click)")
25

Ich habe ein Plugin namens hasEventListener geschrieben, das genau das tut.

Hoffe das hilft.

5
Sebastien P.

Mit dem folgenden Code erhalten Sie alle Klickereignisse für den angegebenen Selektor:

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

Sie können mit each oder zum Beispiel darüber iterieren. Überprüfen Sie die Länge für die Validierung wie folgt:

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

Dachte, es würde jemandem helfen. :)

3
rohtakdev

Ich habe auf eine ähnliche Frage hier geantwortet: hasHandlers () helper

Arbeite mit jQuery> = v1.11.0

1
Nadir

Diese Arbeit für mich zeigt die Objekte und Art des Ereignisses, die aufgetreten sind.

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