Event listeners em JavaScript: click, submit, scroll e delegação

Event listeners em JavaScript

Event listeners em JavaScript: click, submit, scroll | We.Inc

Veja eventos disparando em um log ao vivo e copie padrões de addEventListener para click, submit, scroll, delegação, once, passive e limpeza com AbortController.

Um event listener é uma função que o navegador chama quando algo acontece com um elemento, como um clique, o envio de um formulário ou uma rolagem. Você adiciona um com element.addEventListener(type, handler, options). O objeto de opções ativa once, passive, capture ou um sinal de abort, e removeEventListener desconecta a mesma função depois.

Opções do addEventListener

Eventos ficam mais fáceis de entender quando você consegue vê-los. O log de eventos abaixo registra cada chamada de listener em uma pequena área de teste, então você pode clicar, digitar, enviar e rolar e acompanhar a ordem, o alvo e o efeito de cada opção. Depois, copie os padrões para as tarefas que você realmente tem.

Perguntas frequentes

O que é delegação de eventos?

Em vez de adicionar um listener em cada item, você adiciona um só em um elemento pai comum. Como a maioria dos eventos sobe na árvore, o pai recebe os cliques de todos os filhos, inclusive de itens adicionados depois, e usa event.target para saber qual foi clicado.

Por que o removeEventListener não remove o meu listener?

Ele precisa receber a mesma referência de função e a mesma configuração de capture passadas ao addEventListener. Duas arrow functions com código idêntico continuam sendo funções diferentes, então defina o handler uma vez e passe essa variável nas duas chamadas.

O que passive: true faz?

Diz ao navegador que o seu handler não vai chamar preventDefault, então a página pode começar a rolar na hora, sem esperar o seu código terminar. Os navegadores já usam passive como padrão para listeners de wheel e touch em window, document e body.

Qual é a diferença entre target e currentTarget?

target é o elemento mais interno onde o evento começou, e ele não muda enquanto o evento sobe. currentTarget é o elemento cujo listener está executando agora, que muda a cada nível.

form.submit() dispara o evento submit?

Não. Chamar form.submit() por script pula o evento submit e pula a validação. Chame form.requestSubmit() quando quiser que os seus listeners de submit e as verificações nativas sejam executados.

addEventListener ou onclick?

A propriedade onclick guarda uma única função, então atribuir uma segunda substitui a primeira. O addEventListener permite que vários listeners independentes compartilhem um elemento e aceita o objeto de opções, por isso é o melhor padrão.

Como um evento se propaga

Role sem deixar a página lenta

Limpando listeners

Os tipos de evento que você mais vai usar

Eventos comuns e onde escutá-los

Padrões para copiar

Click com um handler nomeado que você pode remover

Guardar a função em uma variável é o que faz o removeEventListener funcionar.

Tratar o envio de um formulário sem recarregar

preventDefault impede a navegação do próprio navegador. event.submitter diz qual botão de envio foi usado.

Delegação de eventos em uma lista

Um listener na lista trata todos os botões de excluir, inclusive de linhas adicionadas depois que a página carregou.

Um listener de scroll passive limitado a uma atualização por quadro

passive: true deixa a rolagem começar na hora, e requestAnimationFrame limita o trabalho a uma vez por quadro.

once e AbortController

O primeiro listener executa uma única vez. Os outros são todos removidos juntos por uma chamada a abort().

Atalho de teclado que ignora digitação em campos

Verificar o alvo impede que o atalho dispare enquanto alguém digita uma barra em uma caixa de busca.

click no botão: alvo {target}

(once: agora removido)

click chegou à área de teste (fase {phase}): alvo {target}, currentTarget {current}

input: o valor agora é "{value}"

change: valor confirmado

submit no formulário, submitter {submitter}; preventDefault impediu o recarregamento

scroll (passive, um por quadro): scrollTop {n}

click delegado na lista: item {item}

listener por item: {item}

Log de eventos ao vivo

Clique, digite, envie e role na área de teste. Cada chamada de listener é gravada no log com o tipo, o alvo e o alvo atual.

Opções do listener

once no botão

capture na área

delegação na lista

Clique aqui

Digite aqui

Enviar

Lista com delegação

Adicionar item à lista

Item {n}

Caixa de rolagem

Linha de rolagem {n}

Log (mais recentes primeiro)

Limpar log

Nenhum evento ainda.

Comece grátis · Sem cartão de crédito

Relacionados: Guias

Produto

Para quem é

Recursos

Recursos

Empresa

Mapa do site