这取决于你想怎么早去。在IE8上,您可以扩展Element.prototype
以向所有HTML元素添加功能,这至少是工作量的90%。我相当肯定你不能这样做在IE6(PrototypeJS不得不求助于扩展个体Element
实例),我不记得有关IE7。除非你瞄准东亚市场,不过你可以忽略IE7和更早的版本。
这里是如何做到这一点的例子:
(function() {
// Functions for IE
function stopPropagation() {
this.cancelBubble = true;
}
function preventDefault() {
this.returnValue = false;
}
function addEventUsingAttach(eventName, handler)
{
this.attachEvent("on" + eventName, function() {
var e = window.event;
e.stopPropagation = stopPropagation;
e.preventDefault = preventDefault;
handler.call(this, e);
});
}
// Function to add `addEvent` to the given target object
function extendIt(target)
{
if (target.addEventListener) {
target.addEvent = Element.prototype.addEventListener;
}
else {
target.addEvent = addEventUsingAttach;
}
}
// Add it to `Element.prototype` if we have it
if (typeof Element !== "undefined" &&
typeof Element.prototype !== "undefined") {
extendIt(Element.prototype);
}
// Add it to `window` and `document` (etc.)
extendIt(window);
extendIt(document);
})();
Live Example | Source
然后您手动扩展其他EventTargets,如window
和document
(请参阅上面的代码清单的末尾)。
原来的答复:我原来是误解你的问题是有关添加addEventListener
,具体而言,IE8的,而实际上你的问题是很清楚不有关补充说,但是添加自己的addEvent
。我要离开这个答案在原地其他读者:
这取决于你想怎么早去。在IE8,您可以扩展Element.prototype
添加addEventListener
给它,这将通过页面上的所有HTML元素被使用(见下文)。但是,添加的垫片不能支持捕获阶段,因为直到他们本机支持addEventListener
时,IE才支持它。我相当肯定你不能在早期版本(IE7,IE6)延长Element.prototype
,PrototypeJS不得不回落到延长旧版本的IE浏览器的具体内容。但它在IE8中起作用。
扩展Element.prototype
后,您必须手动扩展您提到的其他事件目标,但是扩展Element.prototype
会完成大部分工作。
但是,如果你这样做,你有第三方的脚本,提防他们可以采取正确实施addEventListeneer
完成捕获阶段。
这是一个基本的垫片添加addEventListener
到IE8:
(function() {
function stopPropagation() {
this.cancelBubble = true;
}
function preventDefault() {
this.returnValue = false;
}
if (typeof Element !== "undefined" &&
typeof Element.prototype !== "undefined" &&
!Element.prototype.addEventListener) {
Element.prototype.addEventListener = function(eventName, handler, useCapture) {
if (useCapture) {
throw "Browser doesn't support capturing phase";
}
this.attachEvent("on" + eventName, function() {
var e = window.event;
e.stopPropagation = stopPropagation;
e.preventDefault = preventDefault;
handler.call(this, e);
});
};
}
})();
Live Example | Source
其实T.J.我最初的意思是我可以包含像IE8脚本这样的东西(我完全忽略了它之前的版本),然后正常使用'addEventListener'(不需要在IE8中捕获)。关键是避免使用一个独特的名为addEvent,而不是基于标准的香草JS。 – juuga