在IE javascript中添加eventListener

时间:2012-03-16 19:02:10

标签: javascript internet-explorer events listener

此代码适用于Chrome,但不适用于Internet Explorer 8/9。

/* sitepoint.com/javascript-this-event-handlers */
function AttachEvent(element, type, handler){if (element.addEventListener){element.addEventListener(type, handler, false);}else{element.attachEvent("on"+type, handler);}}

window.addEventListener("load", function() {

            //do some stuff

            AttachEvent(id, "click", function_name); 

}, false);

IE已经抱怨addEventListener行了。 我相信我需要使用attachEvent。我该怎么做呢?我宁愿保留在其他浏览器中工作的代码,只在Internet Explorer中使用attachEvent。 如何使这种跨浏览器兼容?

1 个答案:

答案 0 :(得分:7)

IE9 支持addEventListener()

以下是您的现有功能如何与attachEvent(以及旧on*属性)配合使用。

// logic to attach the event correctly in IE9
function AttachEvent(element, type, handler) {
    if (element.addEventListener) {
        element.addEventListener(type, handler, false);
    }else if (element.attachEvent) {
        element.attachEvent('on' + type, handler)
    } else {
        element['on' + type] = handler;
    }
}

然后设置窗口加载事件...

AttachEvent(window, "load", function() {
    // ...
});     

不要忘记event是旧版IE的全局。如果你愿意,你可以编写脚本。你只需让每个函数调用这个callback(),它将继续使用正确的参数调用用户提供的handler()

var callback = function(e) {
    e = e || window.event;
    handler.call(element, e);
};

您可能会被带走并尝试对event上的属性进行规范化,例如target / srcElement,但您可能需要考虑现有的库。