2013-01-17 111 views
1

我一直在爲跨瀏覽器事件處理組合一個輕量級的事件工具,但遇到了一個相當高的障礙,我不能跳過。它涉及IE9中的srcElement屬性,它只是不適合我!srcElement在IE9中不工作

目前,我的工具看起來像這樣(的srcElement是第三代碼塊):

var bonsallNS = new Object(); 

bonsallNS.events = { 
addEvent: function (node, type, func) { 
    if (typeof attachEvent != "undefined") { 
     node.attachEvent("on" + type, func); 
    } else { 

     node.addEventListener(type, func, false); 
    } 
}, 
removeEvent: function (node, type, func) { 
    if (typeof detachEvent != "undefined") { 
     node.detachEvent("on" + type, func); 
    } else { 

     node.removeEventListener(type, func, false); 
    } 
}, 
target: function (e) { 
    if (typeof srcElement != "undefined") { 
     return window.event.srcElement; 
    } else { 
     return e.target; 
    } 
}, 
preventD: function (e) { 
    if (typeof srcElement != "undefined") { 
     window.event.returnValue = false; 
    } else { 
     e.preventDefault(); 
    } 
} 
} 

現在,使用下面的下面的測試腳本可以在Chrome和Firefox的罰款,但返回evtTarget是當我嘗試提醒它時,在IE中未定義。我不知道爲什麼,所以任何幫助將不勝感激!看下面的代碼:

var gClick = document.getElementById("clickme"); 
var gCount = 0; 

function mssg(e){ 

var evtTarget = bonsallNS.events.target(e); 
alert("it worked, target: " + evtTarget); 
gCount++ 
if (gCount > 2){ 
    bonsallNS.events.removeEvent(gClick, "click", mssg); 
} 
} 

function setUp(){ 
bonsallNS.events.addEvent(gClick, "click", mssg); 
} 

bonsallNS.events.addEvent(window, "load", setUp); 

就像我說的,除IE事件源外的其他所有工作!

+0

IE版本?事件模型在IE <= 8上有所不同,所以這些信息至關重要。 –

+1

if(typeof srcElement!=「undefined」){'be'if(typeof e.srcElement ===「undefined」){'? –

+0

或者,'typeof window.event.srcElement!==「undefined」' - 哪些作品,謝謝!小學生錯誤。 – FunnyOxymoron

回答

1

變量srcElement將始終爲undefined,除非它定義在更高範圍內。但它永遠不會涉及event.srcElement

您可以通過兩種方式解決這個問題:無論是檢查是否ee.srcElement沒有定義,或者是否window.eventwindow.event.srcElement定義。

if (typeof e === "undefined" || typeof e.srcElement === "undefined") { 
// or 
if (typeof window.event !== "undefined" && 
    typeof window.event.srcElement !== "undefined") { 

您也可以縮短整個功能:

target: function (e) { 
    e = e || window.event; 
    return e.target || e.srcElement; 
}