addEventLister和attachEvent的作用,以及两者的区别

在事件监听方面,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:执行顺序与添加顺序相反。

猜你喜欢

转载自blog.csdn.net/xiaoxia188/article/details/84673038