passando la stringa con il nome delll'evento da gestire e la funzione associata, ad esempio:
JavaScript
var htmlObj = document.getElementById("id-elemento-html");
htmlObj.addEventListener("click", handleClick);
function handleClick(event){
console.log(event);
}
In questo modo, senza parametri aggiuntivi, l'evento click viene agganciato alla fase di bubbling.
Capturing e Bubbling
Ma cosa significa bubbling. Per chiarire come vengono gestiti gli eventi in JavaScript può tornare utile riferirsi alla figura seguente:Sequenza eventi Capturing e bubblingriferita ad un HTML come questo
nella figura ho riportato l'esempio di un click sull'elemento element-4.
Gli eventi vengono scatenati dall'elemento più esterno element-1, fino all'elemento su cui si è cliccato (element-4). Questa fase è detta di capturing.
Finita questa fase inizia quella di bubbling dove gli eventi vengono scatenati in ordine inverso, partendo dall'elemento su cui si è cliccato fino ad arrivare all'esterno.
Gli eventi vengono sempre scatenati in questa sequenza, poi sta a noi decidere se gestirli o meno in base alle necessità.
Gestione eventi
A questo punto, per gestire un evento nella fase di capturing va passato un terzo parametro al metodo
var html = document.getElementById("id-elemento-html");
html.addEventListener("click", handleClick, true);
// oppure
html.addEventListener("click", handleClick, { capture: true });
function handleClick(event){
console.log(event);
}
mentre per la fase di bubbling, come si è visto prima, si tratta dell'impostazione di default quindi non va passato il parametro (oppure in alternativa false o { capture: false }).
Demo
Per mostrare come vengono scatenati gli eventi ho creato questa simulazione. Cliccando su un elemento, verranno riportati nel riquadro grigio la sequenza con ci vengono generati gli eventi:
Atendi...
Dove:
Nr: è il numero di sequenza dell'elemento HTML (1=elemento più esterno)
Type: tipo di evento Capturing o Bubbling
Current: id dell'elemento HTML che ha generato l'evento
Target: id dell'elemento HTML su cui è stato fatto il click
Attenzione
Attenzione, sembra che Firefox inverta la sequenza degli eventi sull'elemento su cui si è cliccatoFirefoxmentre su Chrome la sequenza è correttaChrome