Sobes.tech
Junior

Mi a különbség az event.preventDefault és az event.stopPropagation között?

sobes.tech MI

Válasz az MI-től

event.preventDefault() megszünteti a böngésző alapértelmezett műveletét egy eseményhez (például, kattintáskor történő navigáció <a>-nál), és event.stopPropagation() megállítja az esemény terjedését vagy buborékolását a DOM-fán, így ugyanazokat a kezelőket nem hívja meg a szülő vagy gyermek elemeknél.

Példa:

// Tegyük fel, van egy link egy div belsejében
const link = document.querySelector('a');
const div = document.querySelector('div');

// Kattintás kezelő a linken
link.addEventListener('click', (event) => {
  alert('Linkre kattintottak');
  event.preventDefault(); // Megakadályozza a navigációt
});

// Kattintás kezelő a div-en
div.addEventListener('click', (event) => {
  alert('Divre kattintottak');
  // `event.stopPropagation()` nélkül ez a kezelő a link kattintás után fut
});

Ha hozzáadjuk az event.stopPropagation()-t a linkhez:

// Link kattintás és terjedés megállítása
link.addEventListener('click', (event) => {
  alert('Linkre kattintottak');
  event.preventDefault();
  event.stopPropagation(); // Megállítja az esemény terjedését a div felé
});

// Kattintás kezelő a div-en
div.addEventListener('click', (event) => {
  alert('Div'); // Ez az alert nem fog megjelenni a link kattintásakor
});

Összefoglaló táblázat:

Módszer Cselekvés Hatás az alapértelmezett viselkedésre Hatás az esemény terjedésére
event.preventDefault() Az alapértelmezett böngésző művelet megszüntetése Igen Nem
event.stopPropagation() Az esemény terjedésének vagy buborékolásának megállítása Nem Igen