此代码适用于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。 如何使这种跨浏览器兼容?
答案 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
,但您可能需要考虑现有的库。