在IE javascript中添加eventListener

reg*_*gie 1 javascript events internet-explorer 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);
Run Code Online (Sandbox Code Playgroud)

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

ale*_*lex 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;
    }
}
Run Code Online (Sandbox Code Playgroud)

然后,您将设置窗口加载事件...

AttachEvent(window, "load", function() {
    // ...
});     
Run Code Online (Sandbox Code Playgroud)

不要忘记,event旧的IE浏览器是全局的.如果你愿意,你可以编写脚本.你只需要调用每个函数callback(),然后调用用户提供handler()的正确参数.

var callback = function(e) {
    e = e || window.event;
    handler.call(element, e);
};
Run Code Online (Sandbox Code Playgroud)

您可能会被带走并尝试规范化属性event,例如target/ srcElement,但是您可能想要考虑现有的库.