Sobes.tech
Junior

Jaký je rozdíl mezi event.preventDefault a event.stopPropagation?

sobes.tech AI

Odpověď od AI

event.preventDefault() zruší výchozí chování prohlížeče pro událost (například přechod při kliknutí na <a>), a event.stopPropagation() zastaví šíření nebo bubbling události v DOM stromu, čímž zabrání volání stejných handlerů na rodičovských nebo dětských prvcích.

Příklad:

// Předpokládejme, že uvnitř divu je odkaz
const link = document.querySelector('a');
const div = document.querySelector('div');

// Handler kliknutí na odkaz
link.addEventListener('click', (event) => {
  alert('Klik na odkaz');
  event.preventDefault(); // Zruší navigaci
});

// Handler kliknutí na div
div.addEventListener('click', (event) => {
  alert('Klik na div');
  // Bez event.stopPropagation() se tento handler spustí po kliknutí na odkaz
});

Pokud přidáme event.stopPropagation() k handleru odkazu:

// Handler kliknutí na odkaz s ukončením šíření
link.addEventListener('click', (event) => {
  alert('Klik na odkaz');
  event.preventDefault();
  event.stopPropagation(); // Zastaví šíření události k divu
});

// Handler kliknutí na div
div.addEventListener('click', (event) => {
  alert('Klik na div'); // Tento alert se nezobrazí při kliknutí na odkaz
});

Souhrnná tabulka:

Metoda Akce Dopad na výchozí chování Dopad na šíření události
event.preventDefault() Zruší výchozí chování prohlížeče Ano Ne
event.stopPropagation() Zastaví šíření/bubbling události Ne Ano