首先说明:IE的事件流是事件冒泡流。
–事件冒泡:事件开始时由由最具体的元素接收,然后逐级向上传播到较为不具体的节点。
–事件捕获:不太具体的节点更早接收到,最具体的节点最后接收到事件。
–DOM事件流:DOM2级事件流包括三个阶段:1.事件捕获阶段,2.目标阶段,3.事件冒泡阶段(前到后顺序)
IE8及更早版本不支持DOM事件流。
–事件处理程序:
**-HTML事件处理程序:**直接在button onclick
-DOM0级事件处理程序:
通过JavaScript指定事件处理程序的传统方式,就是将一个函数赋值给一个事件处理程序属性
var btn = document.getElementById("myBtn");
btn.onclick = function(){
//DOM0级事件处理作用域:this指向当前元素
alert("Clicked");
};
通过btn.onclick = null移除;
-DOM2级事件处理程序:
addEventListener(“click”,func,“是否在捕获阶段被触发”)
removeEventListener()
–IE事件处理程序:
attachEvent(“onclick”,func)添加的事件处理程序会被添加到冒泡阶段
detachEvent();
与DOM0级方法的主要区别在于事件处理程序的作用域:attachEvent事件处理程序在全局作用域中运行
var btn = document.getElementById("myBtn");
btn.attachEvent("onclick", function(){
alert(this === window); //true
});
–在编写跨浏览器程序时需要特别注意:
addEventListener(“click”,func,是否捕获阶段执行)和attachEvent(“onclick”,func)都可以为同一个元素添加多个事件处理程序,但是与DOM方法(addEventListener)不同的是,这些事件处理程序不是按照他们的添加顺序执行,而是按照相反的方式执行。
//下面的代码,首先看到hello world;
var btn = document.getElementById("myBtn");
btn.attachEvent("onclick", function(){
alert("Clicked");
});
btn.attachEvent("onclick", function(){
alert("Hello world!");
});
总结DOM事件与IE事件处理程序区别:(如有不对欢迎指正)
1.传递参数不同 DOM第一个参数没有"on",并且DOM事件流传递的第三个参数表示是否在捕获阶段执行;
2.IE事件处理程序没有第三个参数,会在冒泡阶段执行;
–本文参考JavaScript高级程序设计