为同一个元素绑定多个相同的事件
element.addEventListener(event, function, useCapture)// event 必须 字符串,指定事件名, 不要使用 "on" 前缀// function 必须 指定要事件触发时执行的函数。// useCapture 可选 布尔值,指定事件是否在捕获或冒泡阶段执行。 true - 事件句柄在捕获阶段执行 false- false- 默认。事件句柄在冒泡阶段执行
element.attachEvent(event,function);// event 有on前缀的事件名// function 指定要事件触发时执行的函数
解绑事件
// element.on事件名字=null;element.addEventListener("没有on的事件名字",命名函数,false);element.removeEventListener("没有on的事件名字",命名函数,false);element.attachEvent("有on事件名字",命名函数);element.detachEvent("有on事件名字",函数名字);
兼容代码
// 绑定事件兼容代码function addEventListener(element, type, fn) {if (element.addEventListener) {element.addEventListener(type, fn, false);} else if (element.attachEvent) {element.attachEvent("on" + type, fn);} else {element["on" + type] = fn;}}
// 解绑事件兼容代码function removeEventListener(element, type, fn) {if (element.removeEventListener) {element.removeEventListener(type, fn, false);} else if (element.detachEvent) {element.detachEvent("on" + type, fn);} else {element["on" + type] = null;}}
事件阶段
- 捕获阶段
- 目标阶段
- 冒泡阶段
一般默认都是冒泡阶段,很少用捕获阶段
冒泡阶段:从里向外
捕获阶段:从外向里
事件冒泡
多个元素嵌套,有层次关系,这些元素都注册了相同的事件,如果里面的元素的事件触发了,外面的元素的该事件自动的触发了
阻止事件冒泡
window.event.cancelBubble = ture; // ie8event.stopPropagation();event.preventDefault(); // 阻止默认行为
事件委托
事件委托就是利用了浏览器事件冒泡的机制,因为事件在冒泡的过程中会上传到父节点,并且父节点可以通过事件对象获取到目标节点,所以可以把子节点的监听函数定义在父节点上,由父节点的监听函数统一处理多个子元素的事件
