Primena zaustavljanja šírenja događaja u JavaScript-u

Neka unutar jednog roditelja imamo dugme i neki blok:

html<div id="parent">
  <button>click me</button>
  <div id="block">
    text
  </div>
</div>

Hvatamo reference na naše elemente u promenljive:

javascriptlet parent = document.querySelector('#parent');
let button = document.querySelector('button');
let block  = document.querySelector('#block');

Neka naš blok inicijalno bude skriven:

css#block:not(.active) {
  display: none;
}

Učinimo da se na klik dugmeta naš blok pojavi:

javascriptbutton.addEventListener('click', function() {
  block.classList.add('active');
});

A sada učinimo da se na klik bilo kog mesta roditelja naš blok sakrije:

javascriptparent.addEventListener('click', function() {
  block.classList.remove('active');
});

Međutim, čeka nas iznenađenje: pošto je dugme unutar roditelja, klik na dugme istovremeno znači i klik na roditelja. To znači da će se prvo naš blok pojaviti, a zatim će se zbog šírenja dogadjaja aktivirati obrađivač u roditelju i naš blok će se sakriti.

I tu nam dolazi u pomoć mogućnost da otkažemo šírenje: možemo učiniti da pri kliku na dugme, otkazivanjem šírenja, roditelj ne reaguje na taj klik.

Задание 1

Samostalno implementirajte korektan rad opisanog zadatka.