Rimozione dei gestori di eventi in un ciclo in JavaScript
Supponiamo ora di avere non un elemento, ma diversi. Ad esempio, diversi paragrafi:
<p>text1</p>
<p>text2</p>
<p>text3</p>
Aggiungiamo a ciascuno di questi paragrafi la funzione func
come gestore del click:
let elems = document.querySelectorAll('p');
for (let elem of elems) {
elem.addEventListener('click', func);
}
function func() {
console.log(this.textContent);
}
Modifichiamo ora il codice in modo che ogni paragrafo reagisca solo al primo click su di esso. Per fare ciò, quando si clicca su un paragrafo rimuoveremo da esso il gestore associato. In questo caso, la rimozione sarà specifica per questo paragrafo, senza influenzare gli altri.
Come già sapete, l'elemento in cui è avvenuto
l'evento può essere ottenuto nella funzione gestore
tramite this. Ciò significa che è necessario
eseguire la rimozione del gestore da this,
in questo modo:
let elems = document.querySelectorAll('p');
for (let elem of elems) {
elem.addEventListener('click', func);
}
function func() {
console.log(this.textContent);
this.removeEventListener('click', func); // rimuoviamo il gestore
}
Sono dati dei paragrafi. Al click su qualsiasi paragrafo aggiungete alla sua fine un punto esclamativo. Fate in modo che questo aggiungimento avvenga solo al primo click.