事件流
事件流描述页面接受事件的顺序,DOM2事件规定事件流分为三个阶段:
- 事件捕获阶段
- 事件目标阶段
- 事件冒泡阶段
事件处理程序
DOM0级事件处理程序
DOM0级事件就是将事件处理程序赋值给一个元素的事件处理属性,像下面这种形式
var btn = document.getElementById("myBtn");
btn.onclick = function(){
alert("Clicked");
};
DOM2级事件处理程序
DOM2级事件新增了两个方法,:绑定事件addEventListener()和移除事件removeEventListener(),方法接收三个参数,事件类型,事件处理程序,布尔值(true代表事件捕获,false代表事件冒泡)
- DOM2级方法可以添加多个同类型事件,执行顺序从前到后依次执行
- 事件执行程序运行在事件对象作用域内
- 通过
addEventListener添加的匿名函数无法解除事件,可以传入一个外部函数名
var btn = document.getElementById("myBtn");
function handle(){
alert('添加事件')
}
btn.addEventListener("click",handle, false);
btn.removeEventListener("click", handle false);
IE事件处理程序
IE 实现了与 DOM 中类似的两个方法:attachEvent()和 detachEvent()。这两个方法接受相同
的两个参数:事件处理程序名称与事件处理程序函数
- IE事件处理程序同样可以添加多个事件,执行顺序从后往前
- 与DOM事件不同的是,执行函数运行在window作用域
- 事件类型要加
on- 和DOM事件执行程序一样,只有通过传入外部事件执行程序的引用,才能用
detachEvent移除事件
var btn = document.getElementById("myBtn");
var handler = function(){
alert("Clicked");
};
btn.attachEvent("onclick", handler);
//这里省略了其他代码
btn.detachEvent("onclick", handler);
跨浏览器事件处理程序
为了在跨浏览器事件处理实现兼容,使用一个对象封装兼容的事件处理程序
var EventUtil = {
addHandler: function(element, type, handler){
if (element.addEventListener){
element.addEventListener(type, handler, false);
} else if (element.attachEvent){
element.attachEvent("on" + type, handler);
} else {
element["on" + type] = handler;
}
},
removeHandler: function(element, type, handler){
if (element.removeEventListener){
element.removeEventListener(type, handler, false);
} else if (element.detachEvent){
element.detachEvent("on" + type, handler);
} else {
element["on" + type] = null;
}
}
};
兼容DOM2级事件的有限采用DOM2级事件处理程序,不兼容的采用IE事件处理程序,全都不兼容采用DOM0级事件
事件对象
触发DOM上的事件是,会产生一个事件对象,事件对象包含了关于事件的一些信息,所有浏览里都支持事件对象,但是支持方式不同
DOM中事件对象
DOM事件会将event事件对象在事件处理程序中传入,无论DOM0级或者DOM2级
var btn = document.getElementById("myBtn");
btn.onclick = function(event){
alert(event.type); //"click"
};
btn.addEventListener("click", function(event){
alert(event.type); //"click"
}, false);
DOM事件对象中的常用属性和方法
type被触发的事件类型target事件的目标preventDefault()取消默认事件stopPropagation()取消事件捕获和冒泡
IE中事件对象
IE中事件对象的支持方式,根据采用不同事件处理程序而不同
1.采用DOM0级事件处理程序,event事件对象在window上
var btn = document.getElementById("myBtn");
btn.onclick = function(){
var event = window.event;
alert(event.type); //"click"
};
2.采用IE事件处理程序,event对象可以通过window.event获取,也可以在事件执行程序里传入
var btn = document.getElementById("myBtn");
btn.attachEvent("onclick", function(event){
alert(event.type); //"click"
});
3.通过HTML特性指定的事件处理程序,那么还可以通过一个名叫event的变量来访问
<input type="button" value="Click Me" onclick="alert(event.type)">
常用事件对象属性和方法
type事件类型srcElement事件目标returnValue设置为false取消默认行为cancelBubble设置为true取消事件冒泡
事件流与事件处理
本文详细解析了事件流的概念,包括事件捕获、目标和冒泡阶段,对比了DOM0级、DOM2级及IE事件处理程序的区别,介绍了跨浏览器事件处理的兼容策略,并深入探讨了事件对象的使用。

被折叠的 条评论
为什么被折叠?



