Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

event como parametro

Tenho uma dúvida..... antes de inserir os comandos de animação eu não tinha passado o event como parametro para a função... e o código estava funcionando normal...

tabelaPacientes.addEventListener("dblclick", function(){  
        event.target.parentNode.remove();            
});

Mas quando eu inseri o comando do fadeOut seguido do timeout, o fadeOut funciona, mas o comando do setTimeout, passou a reclamar com o erro: "Cannot read property 'target' of undefined"

Assim que eu inseri o event no parametro da function do dblclick, passou a funcionar.... ok eu entendi oq aconteceu, oq eu não entendi é como que estava funcionando antes (sem o event).


tabelaPacientes.addEventListener("dblclick", function(){

    event.target.parentNode.classList.add("fadeOut");

    // Tempo definido em milisegundos
    setTimeout(function() {
        event.target.parentNode.remove();            
    }, 500);

});
3 respostas

Thiago, boa tarde!

Eu testei sem passar como parâmetro e dessa forma não funcionou, como você pode ver aqui.

Se você disponibilizar seu código eu testo e posso te dar uma resolução

Felipe, obrigado pela resposta!

Mas então... o problema é o seguinte, se vc executar APENAS este bloco abaixo, SEM o event como parâmetro na function:

tabelaPacientes.addEventListener("dblclick", function(){  
        event.target.parentNode.remove();            
});

Não há problemas e o script de remoção funciona normalmente.

Mas quando eu adiciono o bloco para executar a animação (o bloco do setTimeout), daí sim. Se não tiver o event, o browser reclama.

Eu sei que está errado em não passar o event, mas qual a diferença? Porque num caso funciona e no outro não?

solução!

Boa noite, Thiago! Como vai?

O que ocorre é que quando vc não declara o parâmetro event os navegadores mais modernos te dão uma ajuda declarando ele implicitamente pra vc! Aí nesse caso mais simples as coisas funcionam perfeitamente!

Já no caso onde vc não declara o parâmetro event e ainda utiliza um setTimeout() as coisas não funcionam pq aí o navegador não é inteligente suficiente para ver que o event existia de forma implícita!

Desse modo, vemos que os navegadores mais modernos conseguem em alguns casos corrigir erros de código que cometemos! Mas essas ajudas podem acabar saindo pela culatra como foi nesse seu caso! Portanto, a boa prática é sempre declarar o event como parâmetro da função callback quando vc precisar utilizá-lo!

Pegou a ideia? Qualquer coisa é só falar!

Grande abraço e bons estudos, meu aluno!