Olá Jose Carlos,
Então, pelo o que eu entendi você queria fazer algo assim né:
var pacientes = document.querySelectorAll(".paciente");
pacientes.forEach(function(paciente) {
paciente.addEventListener("dblclick", this.remove());
});
O código acima não funcionaria, por alguns motivos. O primeiro é que o this ali naquele contexto é a window
, e não o paciente. Você pode verificar isto fazendo assim:
var pacientes = document.querySelectorAll(".paciente");
pacientes.forEach(function(paciente) {
paciente.addEventListener("dblclick", console.log(this));
});
Resultado no console:
Window {speechSynthesis: SpeechSynthesis, caches: CacheStorage, localStorage: Storage, sessionStorage: Storage, webkitStorageInfo: DeprecatedStorageInfo…}
Window {speechSynthesis: SpeechSynthesis, caches: CacheStorage, localStorage: Storage, sessionStorage: Storage, webkitStorageInfo: DeprecatedStorageInfo…}
....
Logo, fazer window.remove() não faria muito sentido. E repare que se você testar o código acima, o console.log será executado imediatamente no console. sem esperar o doubleclick. Comentarei isso mais abaixo.
Você pode pensar em contornar o problema do this naquele contexto ser a window
trocando o this direto por uma refêrencia ao paciente, fazendo assim:
var pacientes = document.querySelectorAll(".paciente");
pacientes.forEach(function(paciente) {
paciente.addEventListener("dblclick", paciente.remove());
});
Este código acima até funciona de certo modo, mas ele remove todos os pacientes da página sem aguardar pelo duplo clique em cada paciente. Isto acontece por que o segundo parâmetro da função addEventListener
deve ser uma função e não uma chamada para a função.
Quando o seu javascript passar pelo código e ler a parte paciente.remove()
, ele irá executar a função remove imediatamente, afinal é isto que você disse para ele colocando os parênteses após o remove, que aquela função deve ser chamada ali.
Se quisermos fazer o código funcionar , temos que dizer a addEventListener
qual função deve ser chamada , e não executá-la passando com os parênteses.
Então, um código que funcionaria seria o seguinte:
var pacientes = document.querySelectorAll(".paciente");
pacientes.forEach(function(paciente) {
paciente.addEventListener("dblclick", paciente.remove);
});
Repare, não passsei os () depois do remove, não quero executar a função agora, apenas indicar ao addEventListener qual função deve ser chamada quando o usuário der um doubleclick no paciente.
Vale notar também, que neste caso específico é possível fazer tudo em uma única linha, afinal temos acesso a variável paciente
pois estamos dentro de um forEach()
, mas em geral é muito comum vermos por ai ser utilizado uma função anônima como segundo parâmetro do addEventListener
, até mesmo quando temos apenas uma instrução.
Espero que tenha ficado claro, se não foi esta a sua dúvida ou ainda precisar de esclarecimentos, é só comentar.