Ich versuche, einen Ereignis-Listener innerhalb einer Listener-Definition zu entfernen:
canvas.addEventListener('click', function(event) {
click++;
if(click == 50) {
// remove this event listener here!
}
// More code here ...
Wie könnte ich das machen? this = event ... Danke.
javascript
events
event-handling
listener
Thomas
quelle
quelle
if(click == 50) {
sollten Referenzen seinif( click === 50 )
oderif( click >= 50 )
- sie werden die Ausgabe nicht ändern, aber aus Gründen der Vernunft sind diese Überprüfungen sinnvoller.Antworten:
Sie müssen benannte Funktionen verwenden.
Außerdem muss sich die
click
Variable außerhalb des Handlers befinden, um sie zu erhöhen.EDIT: Sie können die
click_counter
Variable folgendermaßen schließen:Auf diese Weise können Sie den Zähler über mehrere Elemente erhöhen.
Wenn Sie das nicht möchten und jeder einen eigenen Zähler haben soll, gehen Sie folgendermaßen vor:
EDIT: Ich hatte vergessen, den Handler zu benennen, der in den letzten beiden Versionen zurückgegeben wurde. Fest.
quelle
myClick = function(event){...}
auch als benannte Funktion angesehen werden?Sollte es tun.
quelle
arguments.callee
für Interessenten: developer.mozilla.org/en/JavaScript/Reference/…arguments.callee()
im strengen Modus. Vermeiden Sie die Verwendung,arguments.callee()
indem Sie Funktionsausdrücken einen Namen geben oder eine Funktionsdeklaration verwenden wo eine Funktion sich selbst aufrufen muss. " (obwohl escallee()
anstelle von verwendet wirdcallee
, ist es immer noch entfernt, Boo!)Sie können einen benannten Funktionsausdruck verwenden (in diesem Fall wird die Funktion benannt
abc
), wie folgt :Beispiel für schnelles und schmutziges Arbeiten: http://jsfiddle.net/8qvdmLz5/2/ .
Weitere Informationen zu benannten Funktionsausdrücken: http://kangax.github.io/nfe/ .
quelle
quelle
Wenn die Lösung von @ Cybernate nicht funktioniert, versuchen Sie, den Auslöser in seine eigene Funktion zu unterteilen, damit Sie darauf verweisen können.
quelle
Wenn jemand jquery verwendet, kann er dies folgendermaßen tun:
Hoffe, dass es jemandem helfen kann. Beachten Sie, dass die Antwort von @ user113716 gut funktioniert :)
quelle
Ich denke, Sie müssen möglicherweise die Handlerfunktion im Voraus definieren, wie folgt:
Auf diese Weise können Sie den Handler anhand seines Namens aus sich selbst entfernen.
quelle
Versuchen Sie das, es hat bei mir funktioniert.
quelle