繁体   English   中英

srcElement在IE9中不起作用

[英]srcElement not working in IE9

我一直在整理用于跨浏览器事件处理的轻量级事件实用程序,但遇到了一个相当高的障碍,我无法完全跳过。 这与IE9中的srcElement属性有关,对我来说不起作用!

当前,我的实用程序看起来像这样(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时,会将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中的事件源之外,其他所有东西都起作用!

除非在更高范围内定义,否则变量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;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM