2013-08-19 5 views
5

मैं quirksmode.org में प्रासंगिक लेख के सबसे पढ़ा है, लेकिन अभी भी मुझे यकीन है कि यह एक के बारे में नहीं हूँ onclick के रूप में करने का विरोध कियाIE8 हैंडलर घटना

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

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

: जब एक लिंक में ऑनक्लिक ईवेंट सेट करने का प्रयास

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

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

पहला विकल्प का उपयोग करना, myClickHandler undefined सचेत करता है। दूसरे विकल्प अलर्ट का उपयोग [object Event] जो मुझे विश्वास दिलाता है कि ईवेंट ऑब्जेक्ट हैंडलर के पहले विकल्प द्वारा पारित नहीं किया गया है। आईई 8 पर ऐसा क्यों है?

नोट: अटैचमेंट का उपयोग नहीं करना चाहते क्योंकि मैं निष्पादन के दौरान एक एकल श्रोता को ओवरराइड करना चाहता हूं और onclick ठीक ठीक लग रहा है।

उत्तर

9

हां, ईवेंट ऑब्जेक्ट आईई < = 8. में DOM0-style ईवेंट हैंडलर के पैरामीटर के रूप में पारित नहीं किया गया है। इसके बजाय आपको इसे window.event से प्राप्त करने की आवश्यकता है। यदि आप event नामक पैरामीटर जोड़ते हैं, तो IE < = 8 में यह undefined होगा और event के संदर्भ में ईवेंट हैंडलर window.event के बजाय अपरिभाषित पैरामीटर को हल करेगा। मैं आमतौर पर window.event का उपयोग कोड में यह स्पष्ट करने के लिए:

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

महानता। जवाब के लिए धन्यवाद। – user1555863

0

एक बार मैं IE8
समाधान है कि मैं अपने परियोजना में इस्तेमाल में खिड़की और काम पर घटनाओं क्लिक target संपत्ति के साथ संभालने के लिए आवश्यक:

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; 
    }