Ce face removeEventListener
removeEventListener primește exact aceleași argumente ca la adăugare: același tip de eveniment, aceeași funcție (aceeași referință) și aceeași valoare pentru capture. O funcție scrisă din nou, chiar identică, este alt obiect și nu va fi scoasă.
Alternative mai comode: opțiunea { once: true } scoate automat ascultătorul după primul eveniment, iar { signal } cu un AbortController scoate mai mulți ascultători deodată, cu un singur abort().
Parametri
| Parametru | Descriere |
|---|---|
eveniment |
Tipul evenimentului. |
functie |
Aceeași funcție dată la addEventListener. |
optiuni |
Opțional. Trebuie să aibă aceeași valoare capture. |
Ce returnează
undefined.
Exemple
Exemplul 1: Scoaterea unui ascultător
Exemplul folosește un EventTarget simplu, care există și în Node.js; pe un element din pagină funcționează la fel.
const buton = new EventTarget();
const laClic = () => console.log("clic");
buton.addEventListener("click", laClic);
buton.dispatchEvent(new Event("click"));
buton.removeEventListener("click", () => console.log("clic"));
buton.dispatchEvent(new Event("click"));
buton.removeEventListener("click", laClic);
buton.dispatchEvent(new Event("click"));
console.log("gata");
Rezultat
clic
clic
gata
Exemplul 2: once și AbortController
const tinta = new EventTarget();
const controller = new AbortController();
tinta.addEventListener("salvat", () => console.log("o singură dată"), { once: true });
tinta.addEventListener("salvat", () => console.log("până la abort"), { signal: controller.signal });
tinta.dispatchEvent(new Event("salvat"));
controller.abort();
tinta.dispatchEvent(new Event("salvat"));
console.log("fără alte mesaje");
Rezultat
o singură dată
până la abort
fără alte mesaje
Greșeli frecvente
- Scoți o funcție săgeată scrisă direct în apel sau un
bindnou. Este altă funcție, iar ascultătorul rămâne; salvează funcția într-o variabilă.
Comenzi înrudite
addEventListener: Rulează o funcție când se întâmplă ceva pe pagină: un clic, o tastă, trimiterea unui formular.AbortController / AbortSignal.timeout: Oprește o cerere fetch sau altă operație asincronă: la comandă, după un timp sau la primul dintre mai multe semnale.dispatchEvent / new Event / CustomEvent: Creează și declanșează evenimente proprii, cu date atașate, pe care le ascultă alte părți ale codului.