Deo zbornika Učimo Javascript

Dodavanje slušača događaja

Email Twitter LinkedIn Facebook Google

Postoji više načina da dodamo slušač događaja na neki element. Jedini ispravan način je dodavanje događaja preko addEventListener metoda.

Dodela atributa u HTML-u

Dodavanje JS koda u atribut HTML taga je najprimitivniji koncept, i najmanje održiv. Davnih 1990-ih se radilo ovako:

<style>
  div {
    width: 200px;
    height: 200px;
    background: crimson;
  }
</style>

<div onclick="alert('Jooj!')">ne klikći</div>

Kada neko klikne na <div>, aktivira se click događaj i izvršava se JavaScript kod, koji se nalazi unutar stringa u onclick atributu. Ne postoji eksplicitna funkcija koja „sluša“ događaj.

Dodela atributa u Javascriptu

Još jedan način dodavanja događaja je da funkciju dodelimo onclick atributu DOM elementa. Na primer:

<style>
  #kutijica {
    width: 200px;
    height: 200px;
    background: crimson;
  }
</style>

<div id="kutijica"></div>

<script>
  kutijica.onclick = function() {
    document.write('Radi 1. dogadjaj. ')
  }

  kutijica.onclick = function() {
    document.write('Radi 2. dogadjaj. ')
  }

  kutijica.onclick = function() {
    document.write('Radi 3. dogadjaj. ')
  }
</script>

Ovaj način je malo bolji od prethodnog, zato što odvaja HTML od JS koda. Glavna mana je što funkciju možemo dodeliti samo jednom, a svaka sledeća dodela gazi prethodnu. Takođe, objekat događaja neće biti prosleđen povratnoj funkciji kao parametar, za razliku od predviđenog metoda.

Klikni crveni kvadrat i vidi šta ispisuje. Zaključi koji je od tri slušača događaja zapravo dodat elementu.

Metodu document.write koristimo samo za isprobavanje i nikada je ne koristimo u produkciji.

addEventListener metoda

Najbolji način za upravljanje događajima pregledača je da koristimo „slušače“ događaja, u koje možemo dodati više funkcija. Kada se događaj aktivira, sve funkcije se izvršavaju.

<style>
  #kutijica {
    width: 200px;
    height: 200px;
    background: crimson;
  }
</style>

<div id="kutijica"></div>

<script>
  kutijica.addEventListener('click', function() {
    document.write('Radi 1. dogadjaj. ')
  })

  kutijica.addEventListener('click', function() {
    document.write('Radi 2. dogadjaj. ')
  })

  kutijica.addEventListener('click', function() {
    document.write('Radi 3. dogadjaj. ')
  })
</script>

Objašnjenje: dodela vrednosti preko atributa (znak =) uvek gazi prethodnu vrednost. Preko predviđene metode, možemo dodati više događaja na isti element.