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?

A primeira versão do clássico Mega Man, para Nintendo 8 bits, tem seu recorde de pontos estabelecido em 03/11/2006, por David Archey, que cravou 2.396.700 pontos, terminando o jogo.


Nos primeiros oito dias após o lançamento do console Nintendo Wii foram vendidas 600 mil unidades. Isso equivale a quase um por segundo e estes incríveis números são referentes às vendas apenas nos EUA!


As primeiras máquinas de fliperama do mundo a utilizarem moedas, chamadas de Galaxy Game, custavam mais de 20 mil dólares para serem produzidas. Saiba mais sobre elas aqui.


O jogo Final Fantasy X para o Sony Playstation 2 vendeu, apenas no dia do seu lançamento, 1.455.732 cópias, estabelecendo um recorde de vendagem para as primeiras 24 horas de um game. Méritos da SquareSoft, que desenvolveu um excelente produto!


Instalar vários aplicativos com o mesmo propósito, como editores de texto, reprodutores de músicas ou vídeos e até programas antívirus sobrecarregam o seu sistema operacional e ainda ocupam espaço desnecessário em seu HD. Tenha apenas um bom programa para cada função.