2
respostas

Compreendendo o uso do addEventListener na aula

Boa noite, revisando o conteúdo me surgiu uma dúvida. Utilizando "document.querySelectorAll('.paciente'), selecionei uma lista, a qual contém todos os itens da minha página que contém a referida classe. Em seguida foi feito o uso do "foreach" junto do "addEventListener" para "escutar" os eventos. O ponto aqui é: Como o JS entende que foi aquele elemento específico do meu "array" que foi clicado? O laço de repetição vai passar em cada "indice" do array, mas como ele entende até onde deve prosseguir no laço de repetição? Isso não ficou claro para mim.

Fiz um código de teste, e percebi que o laço se mantém até chegar no elemento clicado, mas não consegui entender a 'lógica' que o JS faz para entender qual o elemento sofreu a ação. Segue código:

var teste= document.querySelectorAll('.paciente');

for(let i = 0; teste.length > i; i++){
    teste[i].addEventListener('dblclick',function(){
        console.log('Passei aqui '+i+' vezes');
    })
}
2 respostas

Bom, basicamente, o que esse código vai fazer é adicionar um addEventListener em todos os elementos "teste", e permanecer esperado até o evento ser escutado, quando escutado, ele só checa qual o eventListener ele escutou e mostra na tela, assim, ele sabe qual o elemento e qual o evento! Não sei se ficou claro, mas espero ter ajudado!

Boa noite Gabriel,

Creio que entendi sim. O "addEventListener" é adicionado no elemento, e fica "adormecido" aguardando ele "escutar" o evento. Agora fez mais sentido para mim:

Eu estava partindo do pressuposto que toda a vez o JS iria executar todo o código: for(let i = 0; teste.length > i; i++){ teste[i].addEventListener('dblclick',function(){ console.log('Passei aqui '+i+' vezes'); }) } Quando na verdade ele vincula o "escutador de eventos" no elemento desde o load da página (Pois o código está fora de uma função), e partir disso ele consegue entender especificamente qual o elemento sofreu o evento, uma vez que o "addEventListener" passa a ser uma propriedade de cada paciente.

Está correta minha linha de raciocínio?

Obrigado!