Dobijanje ciljnog elementa pri propagaciji događaja

Neka postoje dva elementa: div i pasus p, koji se nalazi unutar tog div-a:

html<div>
  <p></p>
</div>

Dobijmo referencu na naš div u promenljivu:

javascriptlet div = document.querySelector('div');

Dodajmo neke stilove našim tagovima:

cssdiv {
  padding: 20px;
  border: 1px solid red;
}

p {
  width: 200px;
  height: 200px;
  border: 1px solid green;
}

Neka je sada na div postavljen rukovalac klika:

javascriptdiv.addEventListener('click', function() {
  console.log('click');
});

Zbog toga što naš div ima padding, kada kliknemo na div, možemo pogoditi pasus, ali možemo pogoditi i mesto gde pasusa nema, odnosno direktno na div.

Pri tome će u rukiovaocu klika this uvek pokazivati na onaj element na koji je rukovalac postavljen. U našem slučaju to je naš div:

javascriptdiv.addEventListener('click', function() {
  console.log(this); // div
});

Međutim, možemo dobiti upravo onaj tag u kom se događaj desio. Za ovo možemo proveriti šta se nalazi u event.target:

javascriptdiv.addEventListener('click', function(event) {
  console.log(event.target); // ili div, ili pasus
});

Ova dva slučaja se mogu razlikovati pomoću uslova:

javascriptlet div = document.querySelector('div');

div.addEventListener('click', function(event) {
  if (event.target.tagName === 'DIV') {
    console.log('klik baš po div-u');
  }
  if (event.target.tagName === 'P') {
    console.log('klik baš po pasusu');
  }
});

Umesto tagName može se koristiti matches:

javascriptlet div = document.querySelector('div');

div.addEventListener('click', function(event) {
  if (event.target.matches('div')) {
    console.log('klik baš po div-u');
  }
  if (event.target.matches('p')) {
    console.log('klik baš po pasusu');
  }
});
Задание 1

Data su sledeći elementi:

html<div>
  <ul>
    <li>1</li>
    <li>2</li>
    <li>3</li>
  </ul>
</div>
cssdiv, ul, li {
  padding: 20px;
}

div {
  border: 1px solid red;
}
ul {
  border: 1px solid orange;
}
li {
  border: 1px solid green;
}

Postavite na div rukovaoc klika. U ovom rukoviocu odredite u kojem od tagova se događaj desio.

Задание 2

Modifikujte prethodni zadatak. Uredite tako da pri kliku na li, na njen kraj doda uzvičnik, a pri kliku na ul u konzolu se ispiše informacija o tome.