###监听事件
1、绑定事件监听函数
function addEventHandler(target, type, func) {
if (target.addEventListener) {
// Chrome、FireFox、Opera、Safari、IE9.0
target.addEventListener(type, func, false);
} else if (target.attachEvent) {
// IE8.0及其以下版本
target.attachEvent("on" + type, func);
} else {
// 早期浏览器
target["on" + type] = func;
}
}
2、移除事件监听函数
function removeEventHandler(target, type, func) {
if (target.removeEventListener) {
target.removeEventListener(type, func, false);
} else if (target.detachEvent) {
target.detachEvent("on" + type, func);
} else {
delete target["on" + type];
}
}
###事件顺序
Netscape 4支持事件捕捉 (capturing)
,从顶层的父节点开始触发事件,从外到内转播。
微软则支持事件冒泡 (bubbling)
,从最内层的节点开始触发事件,逐级冒泡直到顶层节点,从内向外传播。
我认为事件冒泡看起来更合理一些,这也是我们日常开发所用的事件模型。W3C对此做了让步,将对这两种事件模型的支持都加入了标准规范之中。根据W3C模型,事件首先被目标元素所捕捉,然后向上冒泡。
你可以自行选择要注册的事件处理程序的调用类型,捕捉或冒泡,通过给addEventListener()
传入第3个参数useCapture
来设置。如果addEventListener()
的最后一个参数是true
,事件处理程序以捕捉模式触发;如果是false
,事件处理程序以冒泡模式触发:
// 给最后一个参数传入false,来设置时间冒泡
button.addEventListener("click", function() {/* ... */ }, false);