## 13.3 事件对象
在触发DOM上都某个事件时,会产生一个事件对象event,这个对象包含这所有与事件有关的信息。包括导致事件的元素、事件的类型以及其他与特定事件相关的信息。
### 13.3.1 DOM中的事件对象
兼容DOM的浏览器会将一个event对象传入到事件处理程序中。无论指定事件处理程序时使用什么方法(DOM0/DOM2),都会传入event对象。
* 只有在事件处理程序执行期间,event对象才会存在;一旦事件处理程序执行完成,event对象就会被销毁。
event对象包含与创建它的特定事件有关的属性和方法,触发的事件类型不一样,可用的属性和方法也不一样。不过,所有事件都有下列属性和方法:
|属性/方法|类型|读/写|说明|
|---|---|---|---|
| bubbles | 布尔值 | 只读 | 表示事件是否冒泡 |
| cancelable |布尔值| 只读 | 表示是否可以取消事件的默认行为 |
| currentTarget | Element类型 | 只读 | 其事件处理程序当前正在处理事件的那个元素 |
| defaultPrevented | 布尔值 | 只读 | 为true时表示已经调用了preventDefault(),DOM3新增 |
| detail| Integer类型 | 只读 | 与事件相关的细节信息 |
| eventPhase| Integer类型 | 只读 | 调用事件处理程序的阶段:1表示捕获阶段,2表示目标阶段,3表示冒泡阶段 |
| preventDefault() | Function类型 | 只读 | 取消事件的默认行为 |
| stopImmediatePropagation() | Function类型 | 只读 | 取消事件的进一步捕获或冒泡,同时组织任何事件处理程序被调用 |
| stopPropagation()| Function类型 | 只读 | 取消事件的进一步捕获或冒泡 |
| target | Element | 只读 | 事件的目标 |
| trusted| 布尔值 | 只读 | 为true时表示事件是浏览器生成的,为false时表示事件是开发人员创建的 |
| type | String类型 | 只读 | 事件类型 |
| view| AbstractView | 只读 | 与事件关联的抽象视图,等同于发生事件的window对象 |
* 在事件处理程序内部,对象this始终等于currentTarget的值,而target则包含事件的实际目标。
~~~
document.body.onclick = function(event){
alert(event.curentTarget === document.body); //true
alert(this === document.body); //true
alert(event.target === document.getElementById("myBtn")); //true
~~~
* 只有cancelable属性设置为true的事件,才可以使用preventDefault()来取消其默认行为。
### 13.3.2 IE中的事件对象
在使用DOM0级方法添加事件处理程序时,event对象作为window对象的一个属性存在。
IE的event对象同样也包含于创建它的事件相关的属性和方法。
|属性/方法|类型|读/写|说明|
|---|---|---|---|
| cancelBubble | 布尔值 | 读/写 | 默认值为false,将其设置为true时,作用和DOM中的stoPropagation()方法一样 |
| returnValue |布尔值| 读/写 | 默认为true,将其设为false时,作用和DOM中的preventDefault()方法的作用一样。 |
| srcElement | Element类型 | 只读 | 事件的目标(与DOM中的target属性相同) |
| defaultPrevented | 布尔值 | 只读 | 被触发的事件的类型 |
### 13.3.3 跨浏览器的事件对象
~~~
var EventUtil = {
addHandler: function(element, type, handler, useCapture) {
// 省略代码
},
removeHandler: function(element, type, handler, useCapture) {
// 省略代码
},
getEvent: function(event){
return event || window.event;
},
getTarget: function(evetn){
return event.target || event.srcElement;
},
preventDefault: function(event){
if(event.preventDefault){
event.preventDefault();
}else{
event.returnValue = false;
}
},
stopPropagation: function(event){
if(event.stopPropagation){
event.stopPropagation();
}else{
event.cancelBubble = true;
}
}
};
//调用
div.onclick = function(event){
event = EventUtil.getEvent(event);
target = EventUtil.getTarget();
EventUtil.preventDefault();
EventUtil.stopPropagation();
}
~~~
- 前言
- 第一章 JavaScript简介
- 第三章 基本概念
- 3.1-3.3 语法、关键字和变量
- 3.4 数据类型
- 3.5-3.6 操作符、流控制语句(暂略)
- 3.7函数
- 第四章 变量的值、作用域与内存问题
- 第五章 引用类型
- 5.1 Object类型
- 5.2 Array类型
- 5.3 Date类型
- 5.4 基本包装类型
- 5.5 单体内置对象
- 第六章 面向对象的程序设计
- 6.1 理解对象
- 6.2 创建对象
- 6.3 继承
- 第七章 函数
- 7.1 函数概述
- 7.2 闭包
- 7.3 私有变量
- 第八章 BOM
- 8.1 window对象
- 8.2 location对象
- 8.3 navigator、screen与history对象
- 第九章 DOM
- 9.1 节点层次
- 9.2 DOM操作技术
- 9.3 DOM扩展
- 9.4 DOM2和DOM3
- 第十章 事件
- 10.1 事件流
- 10.2 事件处理程序
- 10.3 事件对象
- 10.4 事件类型
- 第十一章 JSON
- 11.1-11.2 语法与序列化选项
- 第十二章 正则表达式
- 12.1 创建正则表达式
- 12.2-12.3 模式匹配与RegExp对象
- 第十三章 Ajax
- 13.1 XMLHttpRequest对象
- 你不知道的JavaScript
- 一、作用域与闭包
- 1.1 作用域
- 1.2 词法作用域
- 1.3 函数作用域与块作用域
- 1.4 提升
- 1.5 作用域闭包
- 二、this与对象原型
- 2.1 关于this
- 2.2 全面解析this
- 2.3 对象
- 2.4 混合对象“类”
- 2.5 原型
- 2.6 行为委托
- 三、类型与语法
- 3.1 类型
- 3.2 值
- 3.3 原生函数