传统方式
element.onclick = function(e){ // ... };
1. 传统绑定的优点
非常简单和稳定,可以确保它在你使用的不同浏览器中运作一致
处理事件时,this关键字引用的是当前元素,这很有帮组
2. 传统绑定的缺点
传统方法只会在事件冒泡中运行,而非捕获和冒泡
一个元素一次只能绑定一个事件处理函数。新绑定的事件处理函数会覆盖旧的事件处理函数
事件对象参数(e)仅非IE浏览器可用
W3C方式
element.addEventListener('click', function(e){ // ... }, false);
1. W3C绑定的优点
该方法同时支持事件处理的捕获和冒泡阶段。事件阶段取决于addEventListener最后的参数设置:false (冒泡) 或 true (捕获)。
在事件处理函数内部,this关键字引用当前元素。
事件对象总是可以通过处理函数的第一个参数(e)捕获。
可以为同一个元素绑定你所希望的多个事件,同时并不会覆盖先前绑定的事件
2. W3C绑定的缺点
IE不支持,你必须使用IE的attachEvent函数替代。
IE方式
element.attachEvent('onclick', function(){ // ... });
1. IE方式的优点
可以为同一个元素绑定你所希望的多个事件,同时并不会覆盖先前绑定的事件。
2. IE方式的缺点
IE仅支持事件捕获的冒泡阶段
事件监听函数内的this关键字指向了window对象,而不是当前元素(IE的一个巨大缺点)
事件对象仅存在与window.event参数中
事件必须以ontype的形式命名,比如,onclick而非click
仅IE可用。你必须在非IE浏览器中使用W3C的addEventListener
Dean Edwards的方案(addEvent/removeEvent库)
1. addEvent的优点
可以在所有浏览器中工作,就算是更古老无任何支持的浏览器
this关键字可以在所有的绑定函数中使用,指向的是当前元素
中和了所有防止浏览器默认行为和阻止事件冒泡的各种浏览器特定函数
不管浏览器类型,事件对象总是作为第一个对象传入
2. addEvent的缺点
仅工作在冒泡阶段(因为它深入使用事件绑定的传统方式)