Примена на прекинување на ширењето на настани во JavaScript

Нека внутри на еден родител имаме копче и одреден блок:

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

Ги добиваме референциите кон нашите елементи во променливи:

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

Нека нашиот блок првично е скриен:

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

Да направиме така што при клик на копчето нашиот блок да се прикаже:

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

А сега да направиме така што при клик на кое било место на родителот нашиот блок да се скрие:

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

Сепак, нè чека изненадување: бидејќи копчето се наоѓа внутри на родителот, кликот на копчето истовремено значи и клик на родителот. Ова значи дека прво нашиот блок ќе се прикаже, а потоа поради ширењето на настанот ќе се активира обработувачот во родителот и нашиот блок ќе се скрие.

Токму тука ни е потребна можноста да се откаже ширењето: можеме да направиме така што при клик на копчето да се откаже ширењето, родителот да не реагира на овој клик.

Задание 1

Самостојно имплементирајте коректна работа на опишаната задача.