J'essaie de supprimer un écouteur d'événement à l'intérieur d'une définition d'écouteur:
canvas.addEventListener('click', function(event) {
click++;
if(click == 50) {
// remove this event listener here!
}
// More code here ...
Comment pourrais-je faire ça? this = event ... Merci.
if(click == 50) {
devraient êtreif( click === 50 )
ouif( click >= 50 )
- ils ne changeront pas la sortie, mais pour des raisons de bon sens, ces vérifications ont plus de sens.Réponses:
Vous devez utiliser des fonctions nommées.
En outre, la
click
variable doit être en dehors du gestionnaire pour être incrémentée.EDIT: Vous pouvez fermer autour de la
click_counter
variable comme ceci:De cette façon, vous pouvez incrémenter le compteur sur plusieurs éléments.
Si vous ne le souhaitez pas et que chacun d'entre eux ait son propre compteur, procédez comme suit:
EDIT: j'avais oublié de nommer le gestionnaire renvoyé dans les deux dernières versions. Fixé.
la source
myClick = function(event){...}
également considérée comme une fonction nommée?Devrait le faire.
la source
arguments.callee
pour les parties intéressées: developer.mozilla.org/en/JavaScript/Reference/...arguments.callee()
en mode strict. Évitez d'utiliserarguments.callee()
en donnant un nom aux expressions de fonction ou en utilisant une déclaration de fonction où une fonction doit s'appeler. " (bien qu'il utilisecallee()
au lieu decallee
, il est toujours supprimé, hué!)Vous pouvez utiliser une expression de fonction nommée (dans ce cas, la fonction est nommée
abc
), comme ceci:Exemple de travail rapide et sale: http://jsfiddle.net/8qvdmLz5/2/ .
Plus d'informations sur les expressions de fonctions nommées: http://kangax.github.io/nfe/ .
la source
la source
Si la solution de @ Cybernate ne fonctionne pas, essayez de casser le déclencheur dans sa propre fonction afin de pouvoir le référencer.
la source
Si quelqu'un utilise jquery, il peut le faire comme ceci:
J'espère que cela peut aider quelqu'un. Notez que la réponse donnée par @ user113716 fonctionne bien :)
la source
Je pense que vous devrez peut-être définir la fonction de gestionnaire à l'avance, comme ceci:
Cela vous permettra de supprimer le gestionnaire par son nom de lui-même.
la source
Essayez ceci, cela a fonctionné pour moi.
la source