javascript – attachEvent在IE> 8.0中不起作用

我正在使用attachEvent一段时间,但似乎IE不再支持这个了吗?
window.attachEvent("onload",Start_Wysiwyg);
window.attachEvent("onscroll",ScrollEditBar,false);

有人有解决这个问题的办法吗?

解决方法

.attachEvent()在IE9中被弃用,并已在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,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().

相关文章

前言 做过web项目开发的人对layer弹层组件肯定不陌生,作为l...
前言 前端表单校验是过滤无效数据、假数据、有毒数据的第一步...
前言 图片上传是web项目常见的需求,我基于之前的博客的代码...
前言 导出Excel文件这个功能,通常都是在后端实现返回前端一...
前言 众所周知,js是单线程的,从上往下,从左往右依次执行,...
前言 项目开发中,我们可能会碰到这样的需求:select标签,禁...