簡體   English   中英

IE8 onclick處理程序事件

[英]IE8 onclick handler event

我在quirksmode.org上閱讀了大部分相關文章,但我仍然不確定這個:

讓我的應用程序與IE8兼容(有趣的樂趣)我在嘗試將onclick事件設置為鏈接時遇到此問題:

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] ,這使我相信事件對象沒有被第一個選項傳遞給處理程序。 IE8為何如此?

注意:不想使用attachEvent,因為我想在執行期間覆蓋單個偵聽器,並且onclick似乎很適合。

是的,事件對象不作為參數傳遞給IE <= 8中的DOM0樣式事件處理程序。您需要從window.event獲取它。 如果添加一個名為event的參數,則在IE <= 8中,這將是undefined並且事件處理程序中對event引用將解析為undefined參數而不是window.event 我通常使用window.event在代碼中使其顯式:

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

一旦我需要在窗口上處理點擊事件並在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;
   }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM