Na aula anterior, aprendemos a criar elementos dinamicamente usando JavaScript.

Agora surge uma pergunta muito importante:

Como lidar com eventos (cliques, por exemplo) em elementos que não existiam no HTML inicial?

A resposta para isso é um conceito poderoso chamado Delegação de Eventos.

🎯 Objetivo da aula

Ao final desta aula, você será capaz de:

  • Entender o problema dos eventos em elementos dinâmicos
  • Aprender o conceito de delegação de eventos
  • Usar corretamente o objeto event
  • Capturar eventos de múltiplos elementos com um único listener
  • Escrever código mais performático e organizado

O problema clássico

Imagine uma lista criada dinamicamente:

 
  const ul = document.createElement("ul"); 
  document.body.appendChild(ul);
  const li = document.createElement("li");
  li.textContent = "Item 1";
  ul.appendChild(li);

Agora queremos capturar o clique nesse <li>.

Se adicionarmos o evento diretamente:

 li.addEventListener("click", () => { console.log("Item clicado"); }); 

Funciona… mas não escala bem.

Por que isso vira um problema?

Imagine uma lista com:

  • 10 itens
  • 100 itens
  • 1000 itens

Adicionar um addEventListener para cada item:

  • Dá mais trabalho
  • Consome mais memória
  • Complica a manutenção
É aqui que muitos projetos começam a ficar lentos e confusos.

Como os eventos funcionam no DOM?

Quando um evento acontece em um elemento, ele sobe na árvore do DOM.

Esse comportamento é chamado de propagação de eventos (event bubbling).

Ou seja:

  • O clique acontece no elemento
  • Depois sobe para o pai
  • Depois para o avô
  • E assim por diante

A ideia da delegação de eventos

Em vez de escutar o evento em cada elemento filho, escutamos o evento no elemento pai.

Depois, verificamos quem realmente disparou o evento.

Isso é delegação de eventos.

Exemplo prático: delegando o clique

Vamos refazer o exemplo da lista usando delegação:

 
  const ul = document.createElement("ul"); 
  document.body.appendChild(ul);
  ["Item 1", "Item 2", "Item 3"].forEach(texto => {
    const li = document.createElement("li");
    li.textContent = texto;
    ul.appendChild(li);
  });
  ul.addEventListener("click", (event) => {
    console.log(event.target.textContent);
  });
 console.log(event.target.textContent); // Saída será o texto do item clicado 

Repare: apenas um listener controla todos os itens.

Entendendo o event.target

O event.target indica qual elemento foi clicado.

Já o event.currentTarget indica onde o evento está sendo escutado.

 
  ul.addEventListener("click", (event) => 
  { 
    console.log("Target:", event.target.tagName); 
    console.log("Current:", event.currentTarget.tagName); 
  }); 
 
    console.log("Target:", event.target.tagName); // Saída será "LI"
    console.log("Current:", event.currentTarget.tagName); // Saída será "UL"

Filtrando o elemento correto

Às vezes, o pai tem vários tipos de filhos. Podemos filtrar:

 
  ul.addEventListener("click", (event) => 
  { 
    if (event.target.tagName === "LI") 
      { 
        console.log("Clique em:", event.target.textContent); 
      } 
  }); 

Por que delegação é tão importante?

  • Funciona com elementos dinâmicos
  • Reduz quantidade de eventos
  • Melhora performance
  • Facilita manutenção
Delegação de eventos é padrão em aplicações modernas.
Não delegue eventos em níveis muito altos sem necessidade — isso pode dificultar o controle.

Resumo da aula para nunca mais esquecer

  • Eventos sobem na árvore do DOM
  • Delegação escuta o evento no elemento pai
  • event.target indica quem disparou o evento
  • Um listener pode controlar vários elementos
  • É essencial para elementos dinâmicos

Na próxima aula, vamos falar sobre performance no DOM — como escrever código que não deixa a página lenta.


HARDWARE

Entendendo o seu computador

O que há dentro do meu computador?

Existem alguns componentes fundamentais presentes dentro do seu computador e é muito importante que você conheça um pouco sobre eles, seja para argumentar com algum vendedor durante a compra de um novo PC ou para identificar alguma atitude desleal de algum técnico que esteja te passando um orçamento para reparo. Na seção Raio-X aqui do Contém Bits você pode conhecer e entender mais detalhadamente sobre cada componente, ou também pode clicar abaixo no componente que deseja, para conhecê-lo melhor.

  • Gabinetes

  • Placas-Mãe

  • Processadores

  • Memória

  • Fontes

  • Drives Ópticos

  • Discos Rígidos

  • SSD

  • Placas de Som

  • Placas de Vídeo

Você Sabia?

Desde o seu lançamento, em 1985, o fantástico jogo Tetris vende pelo menos 70 milhões de unidades por ano em todo o mundo! Os dados são oficiais e fornecidos pela THQ, uma das distribuidoras do título.


Street Fighter 2, lançado para o Super Nintendo no início dos anos 90, foi o principal responsável pelo aumento nas vendas deste console. Graças ao sucesso do título nos Arcades e à perfeita adaptação ao console, muitos consumidores adquiriram o SNES para jogarem o título em casa. Saiba mais.


O primeiro computador a conseguir rodar o jogo Spacewar era o PDP-1, que custava 120 mil dólares e pertencia ao Massachusetts Institute of Technology. O jogo demorou 200 horas para ser desenvolvido, em 1962, e seu criador foi um cientista da computação chamado Steve Russel.


Digitar senhas em computadores de uso coletivo é extremamente perigoso, pois além de softwares de monitoramento, existem dispositivos de hardware que podem capturar suas senhas. Evite ao máximo acessar sites de bancos a partir destes computadores. Veja mais aqui.


O épico jogo River Raid, do Atari, foi desenhado e boa parte de sua programação foi feita por uma mulher: Carol Shaw, uma excelente programadora e funcionária da Activision em 1982. Saiba mais sobre a história deste incrível jogo, aqui.