在事件监听方面,IE提供了attachEvent和detachEvent两个接口,firefox提供了addEventLister和removeEventLister,最简单的兼容处理就是封装这两套接口。
需要特别注意,在firefox下事件处理函数中的this指向被监听的元素本身,在IE下不一样,可使用回调函数call,让当前上下文指向监听元素。
function addEvent(elem,eventName,handler){
if(elem.attachEvent){
elem.attachEvent("on" + eventName,function(){
handler.call(elem)
})
}else if(elem.addEventListener){
elem.addEventListener(eventName,handler,false);
}
}
function removeEvent(elem,eventName,handler){
if(elem.detachEvent){
elem.detachEvent("on" + eventName,function(){
handler.call(elem)
})
}else if(elem.removeEventLister){
elem.removeEventLister(eventName,handler,false);
}
}
1、支持的浏览器
addEventLister在DOM2的浏览器中使用,如Firefor、Chrome等。
attachEvent为IE所用。
2、处理程序执行阶段
addEventLister的第三个参数为true时,在捕获阶段执行;为false时,在冒泡阶段执行。
attachEvent均在冒泡阶段执行。
3、作用域
addEventLister的作用域为元素作用域,this为element引用。
attachEvent的作用域为全局作用域,this为window引用。
4、事件处理程序执行顺序
addEventLister:执行顺序与添加顺序一致。
attachEvent:执行顺序与添加顺序相反。