我有很多代码在缩小的库,文件中使用addEventListener
,但我需要在 IE8 中使用此代码,因此替换addEventListener
与addEvent
:
/*
* 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
,但如何在其他对象中覆盖此方法?
提前致谢 此致
答案 0 :(得分:4)
要像在现代浏览器中一样访问它,您需要将方法添加到Window
,HTMLDocument
和Element
原型。
(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.target
,event.relatedTarget
等属性。
查看Mozilla的addEventListener()
垫片。