JavaScript removeEventListener funktioniert nicht
Habe ich den folgenden code hinzu, um eventListener
area.addEventListener('click',function(event) {
app.addSpot(event.clientX,event.clientY);
app.addFlag = 1;
},true);
Ist es korrekt funktioniert wie erwartet..Später in einer anderen Funktion habe ich versucht zu entfernen, wird der Ereignis-listener mit dem folgenden code
area.removeEventListener('click',function(event) {
app.addSpot(event.clientX,event.clientY);
app.addFlag = 1;
},true);
Aber auch die listener nicht entfernt..Warum ist es passiert?Gibt es irgendein problem mit meinem removeEventListener()?
Hinweis:Hier Bereich ist so etwas wie document.getElementById('myId')
InformationsquelleAutor der Frage Jinu Joseph Daniel | 2012-05-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
Liegt das daran, dass zwei anonyme Funktionen sind ganz verschiedene Funktionen. Ihre
removeEventListener
's argument ist nicht ein Verweis auf die Funktion Objekt wurde zuvor angebracht.InformationsquelleAutor der Antwort duri
Erstellen Sie zwei verschiedene Funktionen, beide Anrufe. Also die zweite Funktion bezieht sich nicht in irgendeiner Weise auf die erste und die engine ist in der Lage zu entfernen-Funktion. Die Verwendung einer gemeinsamen Kennung für die Funktion statt.
später können Sie dann entfernen Sie die handler durch den Aufruf
InformationsquelleAutor der Antwort Sirko
definieren Sie Ihre Event-Handler zuerst,
dann
InformationsquelleAutor der Antwort neohope
Um es zu entfernen, speichern Sie die Funktion in einer Variablen oder einfach nur verwenden Sie eine benannte Funktion und übergeben dieser Funktion, um die
removeEventListener
nennen:InformationsquelleAutor der Antwort ThiefMaster
Wenn Sie möchten, übergeben, lokale Variablen der Funktion, die aufgerufen wird, indem der Ereignis-listener können Sie die Definition der Funktion innerhalb der Funktion (lokale Variablen), und übergeben Sie den Namen der Funktion in der Funktion selbst. Zum Beispiel, starten wir innerhalb der Funktion fügt hinzu, dass die Ereignis-listener mit app als eine lokale variable. Schreiben Sie eine Funktion innerhalb dieser Funktion, wie
Dann haben Sie das, was Sie brauchen, um es zu entfernen, wenn waitExecute genannt wird.
InformationsquelleAutor der Antwort VectorVortec
Ich habe ein problem mit removeEventListener (), die Bedürfnisse zu erklären.
Ich wollte in der Lage sein, um Parameter an Ereignis-Listener, also schrieb ich eine Funktion zum generieren der Ereignis-listener, die wiederum gibt eine zweite Funktion, die Anrufe, die meine beabsichtigte Ereignis-listener als callback.
Die komplette Bibliothek-Datei ist wie folgt:
Dann schrieb ich einen quick-test-Seite herausfinden, ob das funktionierte wie gedacht, und mir erlaubt das hinzufügen UND entfernen von Ereignis-Handlern.
Den HTML-test-Seite ist wie folgt:
Vollständigkeit halber, ich benutze das folgende einfache CSS-Datei aus:
Den test-code ist wie folgt:
So, die Prüfung ist wie folgt:
[1] Befestigen Sie einen click-Ereignishandler für die Schaltfläche #1;
[2] Test, um zu sehen, ob der event-handler wird aufgerufen, wenn ich auf den button klicken;
[3] Sobald dieser test bestanden ist, klicken Sie auf die Taste 2, und ruft den event-handler daran angebracht, das entfernt die alten event-handler angehängt Taste 1, dann ersetzt es mit einem neuen event-handler.
Schritte [1] und [2] funktionieren. Der event-handler verbunden ist, und aufgerufen, wenn ich klicken Sie auf die Schaltfläche.
Das problem ist, mit Schritt [3].
Obwohl ich speichern Sie einen Verweis auf die Funktion generiert MakeEventHandler(), die speziell für den Zweck des Entfernens Sie, dass Ereignis-listener im Schritt [3], hat der Aufruf der Methode removeEventListener() entfernt NICHT die Ereignis-listener. Durch klicken auf den Button #1 feuert BEIDE Ereignis-Listener, einschließlich die, die ich angeblich entfernt!
Unnötig zu sagen, dieses Verhalten finde ich rätselhaft, trotz sorgfältiger Einstellung alles so einrichten, dass die Funktion, die ich geben in der Aufforderung zur removeEventListener() ist das selbst gleiche Funktion Hinzugefügt habe ich zunächst mit addEventListener() - nach alle die Dokumentation zu dem Thema, die ich gelesen habe (inklusive diesem thread), und übergeben Sie einen Verweis auf die gleiche Funktion bei jedem Aufruf sollte Arbeit, aber offensichtlich nicht an.
Bei Schritt [1], test-Ausgabe in der Konsole liest, wie erwartet:
Ist der code auch ausgeführt werden, wie erwartet, in Schritt [2], und eine Schritt für Schritt-Ablaufverfolgung der code zeigt, dass in der Tat, wird der code wie erwartet ausgeführt.
Aber in Schritt [3], während die ersten klicken Sie auf die Taste 1 liefert das gewünschte Ergebnis:
was passiert, wenn die Taste 1 geklickt wird auf anschließend ist diese:
Sicher, auch wenn die Funktion zunächst angebracht, um die Taste 1, dennoch bleibt in Erinnerung, denn es generiert wurde innerhalb von einer Schließung, sollte es immer noch losgelöst von der event-listener-Sammlung für das element? Warum ist es noch angeschlossen ist?
Haben oder ich traf einige seltsame bug mit der Verwendung Verschlüsse mit event-Listenern zu vermelden?
InformationsquelleAutor der Antwort David Edwards
Finde ich, dass für das windows-Objekt, wird der Letzte Parameter "true" ist erforderlich.
Das entfernen funktioniert nicht, wenn es keine capture-flag.
InformationsquelleAutor der Antwort Slavik