Estoy tratando de eliminar un detector de eventos dentro de una definición de detector:
canvas.addEventListener('click', function(event) {
click++;
if(click == 50) {
// remove this event listener here!
}
// More code here ...
¿Cómo podría hacer eso? este = evento ... Gracias.
javascript
events
event-handling
listener
Thomas
fuente
fuente
if(click == 50) {
deberían serif( click === 50 )
oif( click >= 50 )
, no cambiarán la salida, pero por razones de cordura, estas comprobaciones tienen más sentido.Respuestas:
Necesita usar funciones con nombre.
Además, la
click
variable debe estar fuera del controlador para incrementar.EDITAR: Puede cerrar la
click_counter
variable de esta manera:De esta manera puede incrementar el contador en varios elementos.
Si no quieres eso y quieres que cada uno tenga su propio contador, haz esto:
EDITAR: Me había olvidado de nombrar el controlador que se devolvió en las últimas dos versiones. Fijo.
fuente
myClick = function(event){...}
consideraría una función con nombre también?Deberías hacerlo.
fuente
arguments.callee
para partes interesadas: developer.mozilla.org/en/JavaScript/Reference/…arguments.callee()
en modo estricto. Evite usararguments.callee()
dando un nombre a las expresiones de función o una declaración de función donde una función debe llamarse a sí misma ". (aunque se está utilizando encallee()
lugar decallee
, todavía se elimina, ¡boo!)Puede usar una expresión de función con nombre (en este caso, la función se llama
abc
), así:Ejemplo de trabajo rápido y sucio: http://jsfiddle.net/8qvdmLz5/2/ .
Más información sobre expresiones de funciones con nombre: http://kangax.github.io/nfe/ .
fuente
fuente
Si la solución de @ Cybernate no funciona, intente romper el gatillo en su propia función para que pueda hacer referencia a ella.
fuente
Si alguien usa jquery, puede hacerlo así:
Espero que pueda ayudar a alguien. Tenga en cuenta que la respuesta dada por @ user113716 funciona bien :)
fuente
Creo que es posible que deba definir la función del controlador con anticipación, de esta manera:
Esto le permitirá eliminar el controlador por nombre de sí mismo.
fuente
Intenta esto, funcionó para mí.
fuente