事件对象
在触发DOM上的事件时,会产生一个事件对象event,包含所有与事件有关的信息,所有浏览器都支持event对象,但支持方式不同
DOM中的事件对象
兼容DOM的浏览器会将一个event对象传入事件处理程序中。无论指定事件处理程序时使用什么方法(DOM0级或DOM2级),都会传入event对象;event对象包含创建它的特定事件有关的属性和方法。触发的事件类型不一样,可用的属性和方法也不一样,但所有事件都会有以下属性和方法:
- bubbles:布尔值,只读,表明事件是否冒泡
- cancelable:布尔值,只读,表明是否可以取消事件的默认行为
- currentTarget:元素,只读,其事件处理程序当前正在处理事件的那个元素
- defaultPrevented:布尔值,只读,为true表示已经调用了preventDefault( ),DOM3级事件新增
- detail:整数,只读,事件相关的细节信息
- eventPhase:整数,只读,调用事件处理程序阶段:1表示捕获,2表示处于目标,3表示冒泡
- preventDefault( ):函数,只读,取消事件的默认行为。如果cacelable是ture,则可以使用此方法
- stopImmediatePropagation( ):函数,只读,取消事件的进一步捕获或冒泡,同时阻止任何事件处理程序被调用,DOM3级事件新增
- stopPropagation( ):函数,只读,取消事件的进一步捕获或冒泡。如果bubbles为true,则可以使用这个方法
- target:元素,只读,事件的目标
- trusted:布尔值,只读,为true表示事件是浏览器生成的。为false表示事件是由开发人员通过JavaScript创建的,DOM3级事件中新增
- type:字符串,只读,被触发的事件类型
- view:AbstractView,只读,与事件关联的抽象视图。等同于发生事件的window对象
在事件处理程序内部,对象this始终等于currentTarget的值,而target则只包含事件的实际目标
只有在事件处理程序执行期间,event对象才存在;一旦事件处理程序执行完毕,event对象就会被销毁
IE中的事件对象
访问IE中的event对象有几种不同的方式,取决于指定事件处理程序的方法
在使用DOM0级方法添加事件处理程序时,event对象作为window对象的一个属性存在
在使用attachEvent( )添加事件处理程序,则会有一个event对象作为参数被传入事件处理程序函数中,也可以通过window对象来访问event对象
通过HTML特性指定的事件处理程序,可以通过event变量来访问event对象(于DOM中的事件模型相同)
IE的event对象也包含了创建它的事件相关的属性和方法,其中以下属性和方法是所有事件对象都包含的
- cancelBubble:布尔值,读写,默认false,设置为true可以取消事件冒泡(与DOM中的StopPropagation( )方法作用相同)
- returnValue:布尔值,读写,默认true,设置为false可以取消事件默认行为(与DOM中的preventDefault( )方法作用相同)
- srcElement:元素,只读,事件的目标(与DOM中的target属性相同)
- type:字符串,只读,被触发的事件类型
因为事件处理程序的作用域是根据它的方式来确定的,所以不能认为this会始终等于事件目标,最好使用event.srcElement
事件类型
DOM3级规定以下几类事件
- UI(user interface,用户界面)事件,当用户与也页面上的元素交互时触发;
- 焦点事件:当元素获得或失去焦点时触发
- 鼠标事件:当用户通过鼠标在也买你上执行操作时触发
- 滚轮事件:当使用鼠标滚轮(或类似设备)时触发;
- 文本事件:当在文档中输入文本时触发;
- 键盘事件:当用户通过键盘在页面上执行操作时触发
- 变动(mutation)事件:当底层DOM结构发生变化时触发
- 变动名称事件:已废弃
除了以上几类事件,HTML5也定义了一组事件,而有些浏览器还会在DOM和BOM中实现专有事件。这类事件一般都是根据开发人员需求定制,没有规范,因此不同浏览器实现可能不一致
DOM3级事件模块在DOM2级事件模块基础上重新定义了这些事件,也添加了一些新事件。包括IE9在内的所有主流浏览器都支持DOM2级事件