Js给dom元素绑定事件的处理函数总的来讲有两种方式:在html文档中绑定,在js代码中绑定。html
然而,并不推荐在html标签上绑定事件。dom
在js代码中也能够分两种方式绑定事件:函数
1:经过dom元素的onclick等属性,直接绑定;this
2:htm
a.在ie下使用attachEvent/detachEvent函数的方式进行事件的绑定和取消;对象
b.使用W3C标准的addEventListener和removeEventListener,给dom添加事件监听者和移除。事件
第一种方式只能绑定一个事件处理函数,后面的会覆盖前面的。不存在事件处理函数的执行顺序问题。rem
在第二种方式中attachEvent和addEventListener的方法均可以绑定多个事件处理函数,而不会被覆盖。二者除了兼容性问题之外,还有其余区别:文档
1:this的含义,attachEvent中this是window,addEventListener中的this是绑定的dom对象呀;io
2:attachEvent仅支持事件冒泡,addEventListener能够支持事件冒泡,也支持事件捕获;
1.若是经过addEventListener或attachEvent方法给同一个事件绑定多个处理函数,先绑定的先执行。不涉及事件冒泡和事件捕获的问题。
2.若是在addEventListener函数的第三个参数中设置了事件冒泡或者事件捕获的状况,那么:先调用捕获阶段的处理函数,其次调用目标阶段的处理函数,最后调用冒泡阶段的处理函数。
其中,目标阶段函数的执行顺序:先注册的先执行,后注册的后执行。
IE8以及之前能够经过 window.event.cancelBubble=true;阻止事件的继续传播;
IE9+/FF/Chrome经过event.stopPropagation();阻止事件的传播。