Junior
Cos'è la delega?
sobes.tech AI
Risposta dell'AI
Il delegare gli eventi è un modello di progettazione che consente a un singolo gestore di eventi di gestire gli eventi di molti elementi figli. Invece di assegnare un gestore a ogni elemento, il gestore viene assegnato all'elemento genitore. Quando si verifica un evento su un elemento figlio, questo "risale" (bubbling) fino al genitore, dove il gestore può intercettarlo e processarlo.
Principio di funzionamento:
- L'evento viene generato sull'elemento target (ad esempio,
<button>). - L'evento si propaga verso l'alto nell'albero DOM fino agli elementi genitori.
- Il gestore di eventi, associato all'elemento genitore, intercetta l'evento.
- Nel gestore, si può determinare su quale elemento figlio si sia verificato l'evento usando
event.target.
Vantaggi:
- Prestazioni: Meno gestori di eventi, il che riduce il consumo di memoria e CPU, specialmente per liste o tabelle grandi.
- Facilità di gestione: È più facile aggiungere e rimuovere elementi dal DOM, poiché non è necessario collegare/disconnettere continuamente i gestori.
- Pulizia del codice: Meno codice ripetitivo per collegare i gestori.
Esempio:
Supponiamo di avere una lista di elementi e di voler reagire a clic su ciascuno.
Senza delega, dovremmo collegare un gestore a ogni <li>:
// Otteniamo tutti gli elementi <li>
const listItems = document.querySelectorAll('li');
// Colleghiamo un gestore a ogni elemento
listItems.forEach(item => {
item.addEventListener('click', function() {
console.log('Cliccato su:', this.textContent);
});
});
Con delega, colleghiamo il gestore solo al <ul>:
// Otteniamo la lista genitore
const list = document.querySelector('ul');
// Colleghiamo il gestore alla lista
list.addEventListener('click', function(event) {
// Verifichiamo se il clic è stato su un elemento <li>
if (event.target.tagName === 'LI') {
console.log('Cliccato su:', event.target.textContent);
}
});
In questo esempio, usiamo event.target per determinare quale <li> è stato cliccato.