Wie kann überprüft werden, ob ein dynamisch angehängter Ereignis-Listener existiert oder nicht?
Hier ist mein problem: ist es irgendwie möglich zu prüfen, für die Existenz von dynamisch verbunden sind Ereignis-listener? Oder wie kann ich den status des "onclick" (?) Immobilie in DOM? Ich habe gesucht internet wie StackOverflow für eine Lösung, aber kein Glück. Hier ist mein html:
<a id="link1" onclick="linkclick(event)"> link 1 </a>
<a id="link2"> link 2 </a> <!-- without inline onclick handler -->
Dann in javascript füge ich dynamisch erstellte Ereignis-listener, um den 2. link:
document.getElementById('link2').addEventListener('click', linkclick, false);
Der code läuft auch gut, aber alle meine versuche, zu erkennen, dass der angeschlossene Hörer fail:
//test for #link2 - dynamically created eventlistener
alert(elem.onclick); //null
alert(elem.hasAttribute('onclick')); //false
alert(elem.click); //function click(){[native code]} //btw, what's this?
jsFiddle ist hier.
Wenn Sie klicken Sie auf "Hinzufügen" onclick für 2" und dann "[link 2]", - Ereignis wird ausgelöst, gut,
aber der "Test-link 2" immer-berichten falsch.
Kann jemand helfen?
InformationsquelleAutor der Frage Stano | 2012-07-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es keine Möglichkeit zu überprüfen, ob dynamisch verbunden sind Ereignis-Listener existiert oder nicht.
Nur so können Sie sehen, wenn Sie einen Ereignis-listener angehängt ist, wird durch Anhängen von Ereignis-Listenern wie diese:
Können Sie dann testen, ob ein Ereignis-listener angehängt wurde
onclick
durch Rücksendung!!elem.onclick
(oder so ähnlich).InformationsquelleAutor der Antwort Ivan
Was ich tun würde, ist, erstellen Sie eine Boolesche außerhalb Ihrer Funktion, die beginnt, als FALSE und auf TRUE festgelegt wird, wenn Sie schließen Sie das Ereignis. Dies würde dienen als eine Art Flagge für Sie vor Sie schließen Sie die Veranstaltung wieder. Hier ist ein Beispiel, die Idee.
InformationsquelleAutor der Antwort Cesar
Konnte man immer manuell zu überprüfen, wenn Ihr EventListener vorhanden mit Chrom-Inspektor zum Beispiel.
Im Reiter Element, Sie haben die traditionellen "Styles" - Tab und in der Nähe noch eins : "Ereignis-Listener".
Die Ihnen die Liste aller EventListeners, die mit Ihr verbundenen Elemente.
InformationsquelleAutor der Antwort Paul Leclerc
Hier ist ein script, das ich verwendet, um zu überprüfen, die für die Existenz eines dynamisch angefügte Ereignis-listener. Ich verwendet jQuery, um fügen Sie einen Ereignis-handler an ein element, dann trigger-Ereignis (in diesem Fall die "click" - Ereignis). Auf diese Weise kann ich abrufen und erfassen von Ereignis-Eigenschaften bestehen nur, wenn der event-handler verbunden ist.
InformationsquelleAutor der Antwort dsmith63
Habe ich sowas gemacht:
Erstellen von speziellen Attribut für ein element, wenn der Hörer angeschlossen ist, und dann prüfen ob es vorhanden ist.
InformationsquelleAutor der Antwort Karol Grabowski
Ich habe gerade ein script geschrieben, dass können Sie dies erreichen. Es gibt Sie für zwei Globale Funktionen:
hasEvent(Node elm, String event)
undgetEvents(Node elm)
die Sie nutzen können. Werden Sie sich bewusst, dass es ändert dieEventTarget
Prototyp-Methodeadd/RemoveEventListener
und nicht für Ereignisse Hinzugefügt, die durch HTML-markup oder javascript-syntaxelm.on_event = ...
Mehr Infos auf GitHub
Live-Demo
Skript:
InformationsquelleAutor der Antwort Gaurang Tandon
Ich nur fand dies heraus, indem Sie versuchen, um zu sehen, ob meine Falle befestigt war....
wenn Sie :
wird es wieder "null"
aber wenn Sie das tun:
dann ist es "WAHR"
also ich denke, dass, wenn man "addEventListener" zum hinzufügen von event-Handler, der einzige Weg, um es durch "hasOwnProperty". Ich wünschte, ich wusste, warum oder wie, aber ach, nach einiger recherche, habe ich nicht eine Erklärung gefunden.
InformationsquelleAutor der Antwort carinlynchin
Könnte man in der Theorie Huckepack addEventListener und removeEventListener hinzufügen, entfernen einer Flagge auf der "this" - Objekt. Hässlich und habe ich noch nicht getestet ...
InformationsquelleAutor der Antwort kofifus