Risolvere i bug di attachEvent - version 2
In questo vecchio post avevo postato uno script .js che permette di aggiungere un listener in modo crossbrowser, eludendo tra l’altro i numerosi bug di attachEvent.
Grazie alla spunto offertomi da un utente di HTML.it ho deciso di migliorare lo script e di renderlo più riutilizzabile grazie a una nuova funzione, $callListeners, praticamente l’equivalente di fireEvent e dispatchEvent.
Godetevela
-
function $addListener(obj, ev, lis) {
-
if(!obj.events) obj.events = {}
-
if(!obj.events[ev]) obj.events[ev] = [];
-
obj.events[ev].push(lis);
-
if(obj.addEventListener)
-
obj.addEventListener(ev, lis, 0);
-
else if(obj.attachEvent && !obj.events.iefix) {
-
obj.events.iefix = true;
-
obj.attachEvent("on" + ev, function() {
-
$callListeners(obj, ev);
-
});
-
}
-
}
-
-
function $callListeners(obj, ev) {
-
for(var i = 0, l = obj.events[ev].length; i!=l; i++) {
-
obj.events[ev][i].call(obj);
-
}
-
}
-
-
-
window.onload = function() {
-
var el =document.getElementsByTagName("body")[0];
-
$addListener(el, "click", function() { alert(this.nodeType + this.events.click); });
-
$addListener(el, "click", function() { alert(this.tagName); });
-
}