Deo zbornika Učimo Javascript
Dodavanje slušača događaja
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.