替换addEventListener

时间:2014-10-13 19:56:25

标签: javascript internet-explorer-8

我有很多代码在缩小的库,文件中使用addEventListener,但我需要在 IE8 中使用此代码,因此替换addEventListeneraddEvent

 /*
  * Register the specified handler function to handle events of the specified
  * type on the specified target. Ensure that the handler will always be
  * invoked as a method of the target.
  */
 function addEvent(type, handler) {
     if (this.addEventListener)
         this.addEventListener(type, handler, false);
     else {
         this.attachEvent("on" + type,
             function(event) {
                 return handler.call(this, event);
             });
     }
 }

我可以“覆盖”window.addEventListener,但如何在其他对象中覆盖此方法?

提前致谢 此致

1 个答案:

答案 0 :(得分:4)

要像在现代浏览器中一样访问它,您需要将方法添加到WindowHTMLDocumentElement原型。

(function(){
    if (!("addEventListener" in window)) {
        function addEventListener(type, handler) {
            var _this = this;              
            this.attachEvent("on" + type, function(){
                handler.call(_this, window.event);  
            });
        }
        Window.prototype.addEventListener = addEventListener;
        HTMLDocument.prototype.addEventListener = addEventListener;
        Element.prototype.addEventListener = addEventListener;
    }
})();

注意:虽然我们已对该功能进行了规范化访问并解决了this问题,但我们尚未将该事件规范化为w3c标准。因此,它将缺少event.targetevent.relatedTarget等属性。

查看Mozilla的addEventListener()垫片。