Ce face dispatchEvent / new Event / CustomEvent
new Event(tip, optiuni) creează un eveniment; bubbles: true îl face să urce prin părinți, iar cancelable: true permite preventDefault. new CustomEvent(tip, { detail }) adaugă date proprii în e.detail.
dispatchEvent(e) trimite evenimentul: ascultătorii rulează imediat, sincron, înainte ca dispatchEvent să returneze. Returnează false dacă un ascultător a apelat preventDefault() pe un eveniment anulabil. Orice obiect poate emite evenimente dacă extinde EventTarget.
Parametri
| Parametru | Descriere |
|---|---|
tip |
Numele evenimentului. |
optiuni |
bubbles, cancelable, composed și, la CustomEvent, detail. |
Ce returnează
dispatchEvent: false dacă evenimentul a fost anulat, altfel true.
Exemple
Exemplul 1: Un coș care anunță modificările
class Cos extends EventTarget {
#produse = [];
adauga(produs) {
this.#produse.push(produs);
this.dispatchEvent(new CustomEvent("schimbat", { detail: { total: this.#produse.length, produs } }));
}
}
const cos = new Cos();
cos.addEventListener("schimbat", (e) => console.log(`${e.detail.produs} adăugat; în coș: ${e.detail.total}`));
cos.adauga("Carte");
cos.adauga("Pix");
Rezultat
Carte adăugat; în coș: 1
Pix adăugat; în coș: 2
Exemplul 2: Un eveniment anulabil
const document_ = new EventTarget();
document_.addEventListener("inchide", (e) => {
console.log("modificări nesalvate, opresc închiderea");
e.preventDefault();
});
const permis = document_.dispatchEvent(new Event("inchide", { cancelable: true }));
console.log(permis);
console.log(document_.dispatchEvent(new Event("inchide")));
Rezultat
modificări nesalvate, opresc închiderea
false
modificări nesalvate, opresc închiderea
true
Greșeli frecvente
- Te aștepți ca un eveniment creat de tine să urce prin părinți (de exemplu pentru delegare). Implicit nu urcă; adaugă
bubbles: true.
Comenzi înrudite
addEventListener: Rulează o funcție când se întâmplă ceva pe pagină: un clic, o tastă, trimiterea unui formular.preventDefault / stopPropagation: preventDefault oprește acțiunea obișnuită a browserului; stopPropagation oprește urcarea evenimentului spre părinți.HTMLElement.click: Simulează un clic pe un element: declanșează evenimentul click și acțiunea obișnuită (link, căsuță, input de fișier).