Quale gestore verrà eseguito?
Nella variabile c’è un pulsante. Non vi sono gestori assegnati.
Dopo aver eseguito questo codice, quali gestori verranno eseguiti al click sul pulsante? Quale alert verrà mostrato?
button.addEventListener("click", () => alert("1"));
button.removeEventListener("click", () => alert("1"));
button.onclick = () => alert(2);
Risposta: 1
e 2
.
Il primo gestore verrà innescato, poiché non viene rimosso da removeEventListener
. Per rimuovere il gestore dobbiamo passare esattamente la stessa funzione che era stata assegnata. E nel codice viene passata una nuova funzione, che è identica, ma è comunque una nuova funzione.
Per poter rimuovere un oggetto funzione, dobbiamo salvarci un suo riferimento:
function handler() {
alert(1);
}
button.addEventListener("click", handler);
button.removeEventListener("click", handler);
Il gestore button.onclick
aggiunto ad addEventListener
funziona perfettamente.