var mysite = {
    'url': "http://www.ajaxweb20.net",
    'author': "Giuseppe Raso",
    'xhtmlValid': true,
    'cssValid': true
}
Home > Blog

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 :)

  1. function $addListener(obj, ev, lis) {
  2.     if(!obj.events) obj.events = {}
  3.     if(!obj.events[ev]) obj.events[ev] = [];
  4.     obj.events[ev].push(lis);
  5.     if(obj.addEventListener)
  6.         obj.addEventListener(ev, lis, 0);
  7.     else if(obj.attachEvent && !obj.events.iefix) {
  8.         obj.events.iefix = true;
  9.         obj.attachEvent("on" + ev, function() {
  10.             $callListeners(obj, ev);
  11.         });
  12.     }
  13. }
  14.  
  15. function $callListeners(obj, ev) {
  16.     for(var i = 0, l = obj.events[ev].length; i!=l; i++) {
  17.         obj.events[ev][i].call(obj);
  18.     }
  19. }
  20.  
  21.  
  22. window.onload = function() {
  23.   var el =document.getElementsByTagName("body")[0];
  24.   $addListener(el, "click"function() { alert(this.nodeType + this.events.click)});
  25.   $addListener(el, "click"function() { alert(this.tagName)});
  26. }

Leave a Reply