所有在DOM中发生事件的相关信息都会补收集并存储在一个名为 event 的对象中。
信息包含
- 基本信息
公共属性和方法

使用 event.type 可以让处理函数用于处理多种不同的事件
let btn = document.getElementById("myBtn");let handler = function(event) {switch(event.type) {case "click":console.log("Clicked");break;case "mouseover":event.target.style.backgroundColor = "red";break;case "mouseout":event.target.style.backgroundColor = "";break;}};btn.onclick = handler;btn.onmouseover = handler;btn.onmouseout = handler;
- 阻止默认行为
- preventDefault()
- 取消冒泡事件
- stopPropagation()
- eventPhase 可以确定事件流当前所在阶段
- 事件处理程序在捕获阶段被调用 1
- 事件处理程序在目标上被调用 2
- 此时 this、target 和 currentTaget 三者相等
- 事件处理程序在冒泡阶段被调用 3
event对象只在事件处理程序执行期间存在,一旦执行完毕,就会被销毁
IE 事件对象
与DOM事件对象不同,IE事件对象可以基于事件处理程序被指定的方式以不同方式来访问。
- 如果事件处理程序使用DOM0方式,则 event 对象中是 window 对象的一个属性。
- 使用 attachEvent() 时,event对象仍然是 window 对象的属性对象,只是出于方便也将其作为参数传入。
公共属性和方法

- 阻止默认行为
- window.event.returnValue = false;
取消冒泡事件
取消默认事件
- 句柄方式 return false;
- 只能用于句柄方式,addEventListener不行
- 兼容性最好
- e.preventDefault();
- W3C标准
IE9
- e.returnValue=false
- IE
- 句柄方式 return false;
- 对于阻止
a标签默认事件- href=’#’
- href=’javascript:void(0);’
- href=’javascript:;’
- e.preventDefault
事件源对象
- target
- FireFox / Chrome
- srcElement
- IE / Chrome
function(e){var tar = e.target || e.srcElement}
- IE / Chrome
- target
event对象获取
a.addEventListenter('click', function(ev){var e = ev || window.event;})
取消冒泡事件function cancelBubble(ev){var e = ev || window.event;if(e.stopPropagation){e.stopPropagation();}else{e.cancelBubble = true;}}
EventUtil
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 {el["on" + type] = handler;}},getEvent: function(event) {return event ? event : window.event;},getTarget: function(event) {return event.target || event.srcElement;},preventDefault: function(event) {if (event.preventDefault) {event.preventDefault();} else {event.returnValue = false;}},removeHandler: function(element, type, handler) {if(element.removeEventListener) {element.removeEventListener(type, handler, false);} else if (element.dettachEvent) {element.dettachEvent("on" + type, handler);} else {el["on" + type] = null;}}stopPropagation: function(event) {if (event.stopPropagation) {event.stopPropagation();} else {event.cancelBubble = true;}}}
