如何在旧版本的IE中将addEventListener重新定义为attachEvent

How to redefine addEventListener to be attachEvent in older versions of IE

本文关键字:新定义 定义 attachEvent addEventListener 版本 中将 IE      更新时间:2023-09-26

我有一个插件,里面有很多这样的行:

document.addEventListener('keypress', function(e) {
this.drop.addEventListener('click', function(e) {

我想在顶部有一点javascript,它重新定义addEventListener,以便它在旧的浏览器中实际使用attachEvent(我可以使用navigator对象)。我不想像上面那样为每一行代码都做if语句。

var addEvent = function (ele, event, func) {
    if (ele.addEventListener) {
        ele.addEventListener(event, func, false);
    } else if (ele.attachEvent) {
        ele.attachEvent('on' + event, func);
    } else {
        ele['on' + event] = func;
    }
};

我认为最好的方法是自己添加此事件。

这是我能想到的最简单的实现:

if (!Element.addEventListener)
Element.prototype.addEventListener = function(event,handler, placeholder) {
    this.attachEvent('on'+event,handler);
}

在页面的开头运行这个之后,您应该能够在元素上使用addEventListener。我写了应该,因为你需要更多这样的函数才能在所有浏览器上使用相同的代码。您最好的选择是使用现有的代码(如polyfill)来处理所有这些。