attachEvent在IE中不起作用> 8

时间:2013-11-24 19:44:01

标签: javascript internet-explorer

我正在使用attachEvent一段时间,但似乎IE不再支持这个了?

window.attachEvent("onload",Start_Wysiwyg);
window.attachEvent("onscroll",ScrollEditBar,false);

有没有人能解决这个问题?

1 个答案:

答案 0 :(得分:14)

IE9 +中不推荐使用

.attachEvent(),并已在IE11中删除。

标准为.addEventListener()MSDN docs)。 MDN文档有section about compatibility

您只需运行一些功能检查代码即可检查是否存在支持的功能:

if (window.addEventListener) {
    // Check for addEventListener first, since IE9/10 have both,
    // but you should use the standard over the deprecated IE-specific one
    window.addEventListener('click', myFunc);
} else if (window.attachEvent) {
    window.attachEvent('onclick', myFunc);
}

如果你必须附加很多事件监听器,那么你可能只想在变量中缓存所需的监听器附件方法,并使用该变量在整个代码中附加事件,而不是在上面检查每一个事件监听器:

var addListener = function(){}; // Default to no-op function

if (window.addEventListener) {
    addListener = window.addEventListener;
} else if (window.attachEvent) {
    addListener = function(eventType, listener, useCapture) {
        // attachEvent wants 'oneventType' instead of 'eventType'
        window.attachEvent('on'+eventType, listener, useCapture);
    };
}

// Now you can add listeners with a browser-agnostic function call!
addListener('click', myFunc);
addListener('hover', myOtherFunc);

您可以在@MartyIX链接的duplicate question中阅读更多关于您问题的评论。在那里的答案/评论中还有其他细微差别和方法,例如IE9需要<!DOCTYPE html>才能使用.addEventListener()