一般来说,我们为某个对象添加监听事件,使用addEventListener()或attachEvent()函数,那么这两个函数有什么区别呢?

  当我们在IE8中为对象添加监听事件时,我们应该使用attachEvent(),而在其它时候,我们则用addEventListener()。

  下面是一个为某个对象添加监听事件的通用方法:

//Library.js
function $(id) {
	return document.getElementById(id);
};

//为obj对象添加type类型的事件,监听函数是func
function addEvent(obj, type, func) {
	if(obj.addEventListener) {
		obj.addEventListener(type, func, 'false');
	} else if(obj.attachEvent) {
		//IE8
		obj.attachEvent('on' + type, func);
	} else {
		obj['on' + type] = func;
	}
};

  

<div id="div1">Click Me</div>

  为div1添加点击事件时

addEvent($('div1'), 'click', function() {
    alert('hello');
});

  无论在IE8或是Chrome或是Firefox中代码都能正常运行。

 

  第二个不同的地方就是它们的事件处理程序的作用域的不同。addEventListener中事件处理函数会在其所属元素作用域内运行,而attachEvent的事件处理程序会在作用域中运行。如

在IE8中:

var myDiv = document.getElementById('myDiv');
myDiv.attachEvent('onclick', function() {
    alert(this === window);  //true
});

在其他浏览器中:

var myDiv = document.getElementById('myDiv');
myDiv.addEventListener('click', function() {
    alert(this === window); false
}, false);

  

  第三个不同的地方是使用addEventListener为元素注册的事件是哪个先注册哪个先执行,而attachEvent正好相反。

 

  

posted on 2013-10-15 22:16  寒岁青松  阅读(509)  评论(0编辑  收藏  举报