Lezione 6 – Delegazione degli Eventi: L’Arte dell’Efficienza 🎯✨
Benvenuto alla Lezione 6! Ormai hai cliccato, passato sopra con il mouse, digitato e aggiunto attività come un vero professionista. Ma che succede se la tua pagina web è piena di elementi dinamici che non esistevano al caricamento? Niente panico! La delegazione degli eventi è qui per salvare la giornata (e la tua pazienza).
Pensa alla delegazione degli eventi come a un manager in un ristorante: invece di dare istruzioni a ogni singolo cameriere, le dai al capo sala. È elegante, efficiente e rende il tuo codice più fluido di una lasagna ben fatta.
Cos’è la Delegazione degli Eventi? 🤔
La delegazione degli eventi è una tecnica in cui aggiungi un event listener a un elemento genitore, e questo “ascolta” gli eventi sui suoi figli. Invece di attaccare un listener a ogni elemento singolarmente, deleghi il compito al loro antenato comune.
Il segreto? Gli eventi in JavaScript risalgono l’albero DOM. Quando un evento si verifica su un elemento figlio, viaggia verso i suoi genitori, attivando qualsiasi listener trovi lungo il cammino. Questo significa che puoi intercettare eventi su elementi che nemmeno esistevano quando la pagina è stata caricata!
Creiamo il Nostro Parco Giochi degli Eventi 🛠️
-
Crea una nuova cartella per questa lezione (o aggiungi i file alla tua cartella
DOM_Project
):mkdir Lezione6 cd Lezione6
-
Crea un file HTML chiamato
index.html
:<!DOCTYPE html> <html lang="it"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Delegazione Eventi</title> <style> body { font-family: Arial, sans-serif; margin: 20px; } #parent-container { border: 2px solid lightblue; padding: 10px; margin-top: 20px; } .child { margin: 5px 0; padding: 5px; border: 1px dashed gray; cursor: pointer; } </style> </head> <body> <h1>Parco Giochi della Delegazione degli Eventi 🎢</h1> <button id="add-child-btn">Aggiungi un Nuovo Figlio</button> <div id="parent-container"> <div class="child">Figlio 1</div> <div class="child">Figlio 2</div> <div class="child">Figlio 3</div> </div> <script src="script.js"></script> </body> </html>
-
Crea un file JavaScript chiamato
script.js
:const parentContainer = document.getElementById("parent-container"); const addChildBtn = document.getElementById("add-child-btn"); // Delegazione degli eventi: ascolta i click sui figli tramite il genitore parentContainer.addEventListener("click", function(event) { if (event.target.classList.contains("child")) { alert(`Hai cliccato su ${event.target.textContent}`); } }); // Aggiungi nuovi elementi figlio dinamicamente addChildBtn.addEventListener("click", function() { const newChild = document.createElement("div"); newChild.classList.add("child"); newChild.textContent = `Figlio ${parentContainer.children.length + 1}`; parentContainer.appendChild(newChild); });
Serviamo il Progetto Localmente con Caddy 🌐
Hai già installato Caddy? Perfetto! Ecco come servire il progetto:
-
Vai nella tua cartella del progetto:
cd Lezione6
-
Avvia il server Caddy: Usa questo comando per servire il progetto:
caddy file-server --listen :8080
-
Apri il Browser:
- Vai su http://localhost:8080 per visualizzare il tuo progetto dal vivo.
Ecco fatto! Ora puoi interagire con il progetto in tempo reale. E se le modifiche non si vedono subito, non dimenticare di usare Ctrl + F5!
Come Funziona ⚙️
- Configurazione iniziale: Il
parentContainer
parte con tre figli (Figlio 1
,Figlio 2
, eFiglio 3
). - Aggiunta di un Listener al Genitore: Invece di aggiungere un listener a ogni figlio, lo aggiungiamo al genitore. La magia del bubbling fa sì che i click sui figli vengano catturati dal genitore.
- Elementi Dinamici: Cliccando il pulsante “Aggiungi un Nuovo Figlio” si creano dinamicamente nuovi elementi figlio. E il listener del genitore funziona perfettamente anche per loro—nessun codice extra necessario!
Perché Usare la Delegazione degli Eventi? 🚀
- Efficienza: Non serve attaccare listener a ogni singolo elemento.
- Semplicità: Un listener per tutti! Perfetto per contenuti dinamici.
- Performance: Meno listener significa migliori performance, specialmente per applicazioni di grandi dimensioni.
Prova Tu Stesso 🧪
- Apri il browser e naviga su http://localhost:8080.
- Clicca sui figli esistenti (
Figlio 1
,Figlio 2
,Figlio 3
) per vedere l’alert. - Aggiungi nuovi figli con il pulsante “Aggiungi un Nuovo Figlio” e cliccali. Il listener del genitore funziona alla perfezione anche per loro!
Mini Progetto: Lista di Cose da Fare 📝
Applichiamo la delegazione degli eventi per creare una lista interattiva di cose da fare, in cui i compiti possono essere completati o rimossi.
-
Aggiorna il tuo HTML:
<input type="text" id="task-input" placeholder="Aggiungi un nuovo compito e premi Invio" /> <ul id="task-list"></ul>
-
Aggiorna il tuo
script.js
:const taskInput = document.getElementById("task-input"); const taskList = document.getElementById("task-list"); // Aggiungi nuovi compiti dinamicamente taskInput.addEventListener("keydown", function(event) { if (event.key === "Enter" && taskInput.value.trim() !== "") { const taskItem = document.createElement("li"); taskItem.textContent = taskInput.value; taskItem.classList.add("task"); taskList.appendChild(taskItem); taskInput.value = ""; // Svuota il campo } }); // Usa la delegazione degli eventi per gestire i click sui compiti taskList.addEventListener("click", function(event) { if (event.target.classList.contains("task")) { event.target.style.textDecoration = "line-through"; // Segna come completato } });
Cosa Succede Dopo?
Fantastico lavoro! Ora conosci la delegazione degli eventi e come gestire eventi in modo efficiente. Nel prossimo modulo esploreremo le animazioni JavaScript, dove faremo muovere, rimbalzare e svanire le tue pagine come in un musical di Broadway.
Alla prossima in Lezione 7 – Animazioni JavaScript: Dai Vita alle Tue Pagine Web!
Ora vai e delega come un vero capo! 🎠
Vedi anche
- Lezione 5 – Magia degli Eventi: Rendiamo le Pagine Web Interattive
- Lezione 4 – Manipolazione del DOM: Trasforma il Web nel Tuo Parco Giochi Personale
- Lezione 3 – Array e Oggetti: I Tuoi Scrigni di Dati
- Lezione 2 – Cicli e Condizionali: Prendere Decisioni e Ripeterti (Senza Impazzire)
- Scopri il Potere di JavaScript – Un Viaggio per Principianti (Mantello Non Necessario)