其实并不难 - 事件定义并不多,只有三个版本。第一个是正确的 (addEventListener
),然后是IE的方式 (attachEvent
),还有一种兼容旧浏览器的方式 (element.onevent = function
)
因此,完整的事件处理解决方案应该像这样:
setEvent = function(element, eventName, handler){
if('addEventListener' in element){
//W3
element.addEventListener(eventName,handler,false);
}else if('attachEvent' in elm){
//IE
elm.attachEvent('on'+eventName,handler)
}else{
// compatibility
elm['on'+eventName] = handler;
}
}
并清除事件:
clearEvent = function(element, eventName, handler){
if('removeEventListener' in element){
element.removeEventListener(eventName,handler,false);
}else if('detachEvent' in elm){
elm.detachEvent('on'+eventName,handler)
}else{
elm['on'+eventName] = null;
}
}
还有一个例子:
setEvent(document, "click", function(){alert('hello world!');});
clearEvent(document, "click", function(){alert('hello world!');});
这并不是一个完整的示例,因为兼容性处理程序总是覆盖先前的事件(它不是追加操作,而是覆盖),所以您可能希望检查是否已经设置了处理程序,然后将其保存到某个临时变量中,并在事件处理程序函数内触发它。