Estou tentando remover um ouvinte de evento dentro de uma definição de ouvinte:
canvas.addEventListener('click', function(event) {
click++;
if(click == 50) {
// remove this event listener here!
}
// More code here ...
Como eu pude fazer isso? this = event ... Obrigado.
javascript
events
event-handling
listener
Thomas
fonte
fonte
if(click == 50) {
devem serif( click === 50 )
ouif( click >= 50 )
- elas não mudarão a saída, mas por razões de sanidade essas verificações fazem mais sentido.Respostas:
Você precisa usar funções nomeadas.
Além disso, a
click
variável precisa estar fora do manipulador para incrementar.EDIT: Você pode fechar em torno da
click_counter
variável assim:Dessa forma, você pode incrementar o contador em vários elementos.
Se você não quer isso e deseja que cada um tenha seu próprio contador, faça o seguinte:
Edição: Eu tinha esquecido de nomear o manipulador sendo retornado nas duas últimas versões. Fixo.
fonte
myClick = function(event){...}
considerada uma função nomeada também?Deveria fazê-lo.
fonte
arguments.callee
para as partes interessadas: developer.mozilla.org/en/JavaScript/Reference/…arguments.callee()
no modo estrito. Evite usararguments.callee()
dando um nome às expressões de função ou usando uma declaração de função onde uma função deve se chamar ". (embora esteja usando emcallee()
vez decallee
, ainda é removido, boo!)Você pode usar uma expressão de função nomeada (nesse caso, a função é nomeada
abc
), assim:Exemplo de trabalho rápido e sujo: http://jsfiddle.net/8qvdmLz5/2/ .
Mais informações sobre expressões de funções nomeadas: http://kangax.github.io/nfe/ .
fonte
fonte
Se a solução do @ Cybernate não funcionar, tente ativar o gatilho para sua própria função, para que você possa fazer referência a ele.
fonte
Se alguém usa jquery, ele pode fazer assim:
Espero que possa ajudar alguém. Observe que a resposta dada por @ user113716 funciona muito bem :)
fonte
Eu acho que você pode precisar definir a função de manipulador com antecedência, assim:
Isso permitirá que você remova o manipulador por nome de dentro dele.
fonte
Tente isso, funcionou para mim.
fonte