2013-08-19 21 views
5

Czytałem większość odpowiednich artykułów w quirksmode.org ale nadal nie jestem pewna jednego:IE8 onclick obsługi zdarzeń

Making moja aplikacja zgodna z IE8 (Zabawnie) I napotkać ten problem gdy próbuje ustawić zdarzenie onclick do linku:

function myClickHandler(event) 
{ 
    alert(event); 
} 

var link = document.getElementById("myLink"); 
link.onclick = myClickHandler; //first option 

w przeciwieństwie do:

function myClickHandler(event) 
{ 
    alert(event); 
} 

var link = document.getElementById("myLink"); 
link.onclick = function() { 
    myClickHandler(event); //second option 
} 

Korzystanie pierwszą opcję, myClickHandler alarmuje undefined. Za pomocą drugiej opcji powiadamiam [object Event], która sprawia, że ​​wierzę, że obiekt zdarzenia nie jest przekazywany przez pierwszą opcję do obsługi. Dlaczego tak jest w IE8?

Uwaga: nie używaj funkcji attachEvent, ponieważ chcę zastąpić pojedynczego detektora podczas wykonywania i wydaje się, że pasuje tutaj onclick.

Odpowiedz

9

Tak, obiekt zdarzenia nie jest przekazywany jako parametr do obsługi zdarzeń w stylu DOM0 w IE < = 8. Zamiast tego należy go pobrać z window.event. Jeśli dodasz parametr o nazwie event, to w IE < = 8 będzie to undefined, a odwołania do event w obrębie procedury obsługi zdarzenia zostaną przekształcone na niezdefiniowany parametr, a nie window.event. Zwykle używam window.event aby ta wyraźna w kodzie:

link.onclick = function(evt) { 
    evt = evt || window.event; 
} 
+0

Wielkość. Dziękuję za odpowiedź. – user1555863

0

Raz musiałem obsłużyć kliknij wydarzenia na oknie i pracy z target nieruchomości w IE8
rozwiązanie, które użyłem w moim projekcie:

document.onclick = function(event) { 
       event = event || fixEvent.call(this, window.event); 
       var target = event.target || event.srcElement; 
       var className = target.className; 
       // .... 
      }; 




//For IE8 
// source: https://learn.javascript.ru/fixevent 
    function fixEvent(e) { 

     e.currentTarget = this; 
     e.target = e.srcElement; 

     if (e.type == 'mouseover' || e.type == 'mouseenter') e.relatedTarget = e.fromElement; 
     if (e.type == 'mouseout' || e.type == 'mouseleave') e.relatedTarget = e.toElement; 

     if (e.pageX == null && e.clientX != null) { 
      var html = document.documentElement; 
      var body = document.body; 

      e.pageX = e.clientX + (html.scrollLeft || body && body.scrollLeft || 0); 
      e.pageX -= html.clientLeft || 0; 

      e.pageY = e.clientY + (html.scrollTop || body && body.scrollTop || 0); 
      e.pageY -= html.clientTop || 0; 
     } 

     if (!e.which && e.button) { 
      e.which = e.button & 1 ? 1 : (e.button & 2 ? 3 : (e.button & 4 ? 2 : 0)); 
     } 

     return e; 
    } 
Powiązane problemy