Podpinanie eventów w JavaScript

Piotr Kowalczyk
05.09.2015

Kiedy chcemy dopiąć sobie event do jakiegoś elementu na stronie przez JavaScript mamy 2 metody.

1. Przestarzała, i nie smaczna:

KOD
element.onclick = function() {
// Kod
}

// lub

function klik() {
// Kod
}
element.onclick = klik;


Wada - nie można dopiąć więcej niż jednej funkcji do eventu.

2. Lepsza, ale trochę trudniejsza
Dlaczego trudniejsza? IE nie obsługuje standardu podpinania eventów smile.gif
Kod dla IE:

KOD
element.attachEvent('onclick',function() {
// Kod
});

// lub
function klik() {
// Kod
}

element.attachEvent('onclick', klik);



Kod dla reszty świata:

KOD
element.addEventListener('click',function() {
// Kod
}, false);

// lub
function klik() {
// Kod
}

element.addEventListener('click', klik, false);



3. Jak ułatwić sobie życie?
Napiszemy funkcję, która będzie podpinać event i w IE, i w innych przeglądarkach:

KOD
function bindEvent(obj, event, func) {
try {
/* Wersja dla normalnych przeglądarek */
obj.addEventListener(event,func,false);
} catch(e) {
try {
/* Wersja dla IE, wykonywana gdy powyższy kod nie wypali */
obj.attachEvent('on'+event,func);
} catch(e) { /* Nie udało się podpiąć :( Prawdopodobnie jakaś średniowieczna przeglądarka. */ }
}
}



Przykład użycia

KOD

bindEvent(document /* obiekt do którego chcesz podpiąć event */, "load" /* nazwa eventu !BEZ "on"! */, /* funkcja, w tym wypadku anonimowa */ function() {
alert("Tak, to działa! :)");
});

Zgłoś swój pomysł na artykuł

Więcej w tym dziale Zobacz wszystkie