Bubbling e capturing negli eventi Javascript: guida completa

Introduzione:

Nel Document Object Model (DOM), gli eventi sono utilizzati per comunicare le azioni dell’utente e le modifiche dello stato del documento. Quando si verifica un evento, come un clic del mouse o un movimento del mouse, viene attivato un gestore di eventi associato all’elemento DOM interessato.

Esistono due modalità di propagazione degli eventi nel DOM: bubbling e capturing.

Bubbling:

  • È la modalità di propagazione predefinita.
  • L’evento inizia dall’elemento target (l’elemento su cui si è verificata l’azione) e si propaga verso l’alto fino all’elemento radice del DOM.
  • Lungo il percorso, l’evento viene catturato da tutti gli elementi antenati del target che hanno un gestore di eventi per quel tipo di evento.

Esempio:

Immaginiamo di avere una struttura HTML con un div che contiene un pulsante. Se si fa clic sul pulsante, l’evento click si propagherà prima al pulsante, poi al div e infine all’elemento body.

Capturing:

  • È una modalità di propagazione opzionale.
  • L’evento inizia dall’elemento radice del DOM e si propaga verso il basso fino all’elemento target.
  • Lungo il percorso, l’evento viene catturato da tutti gli elementi discendenti del target che hanno un gestore di eventi per quel tipo di evento.

Esempio:

Utilizzando lo stesso esempio precedente, se si attiva la cattura per l’evento click, l’evento verrà catturato prima dall’elemento body, poi dal div e infine dal pulsante.

Quando utilizzare la cattura:

  • La cattura è utile quando si desidera intercettare un evento prima che raggiunga il target.
  • Ad esempio, si può utilizzare la cattura per impedire la propagazione di un evento a determinati elementi.

Differenze tra bubbling e capturing:

CaratteristicaBubblingCapturing
Direzione di propagazioneDall’elemento target all’elemento radiceDall’elemento radice all’elemento target
Momento di catturaDopo che l’evento ha raggiunto il targetPrima che l’evento raggiunga il target
Ordine di catturaI gestori degli eventi vengono attivati in ordine gerarchico, dal target verso l’altoI gestori degli eventi vengono attivati in ordine inverso, dalla radice verso il basso
Tabella riassuntiva delle differenze tra bubbling e capturing

Esempio di codice:

// Bubbling
document.getElementById("button").addEventListener("click", function() {
  // Gestore di eventi per il pulsante
});

document.getElementById("div").addEventListener("click", function() {
  // Gestore di eventi per il div
});

// Capturing
document.addEventListener("click", function(event) {
  // Gestore di eventi per l'elemento body
  if (event.target.id === "button") {
    // Gestore di eventi specifico per il pulsante
  }
}, true); // Attiva la cattura

Conclusione:

La comprensione del bubbling e del capturing degli eventi è fondamentale per creare interfacce utente interattive e responsive. La scelta di quale modalità utilizzare dipende dalle esigenze specifiche del tuo progetto.

Risorse utili

Gestione eventi in Javascript

Pubblicato da Carlo Contardi

Carlo Contardi, docente di informatica e sviluppatore Full Stack, condivide la sua passione per la programmazione e l’informatica attraverso il suo blog Space Coding. Offre preziosi consigli e soluzioni pratiche a chi vuole imparare a programmare o migliorare le proprie abilità. 🚀👨‍💻

Translate »