在触发DOM上的某个事件时,会产生一个事件对象event,这个对象中包含着所有与事件有关的信息。
DOM中的事件对象
兼容DOM的浏览器会将一个event对象传入到事件处理程序中,无论指定事件处理程序时是DOM0级事件还是DOM2级事件,都会传入event对象。
var btn = document.getElementById('btn')
btn.onclick = function(event){
console.log(event.type) //'click'
}
btn.addEventListener('click', function(event){
console.log(event.type) // 'click'
},false)
event对象包含与创建它的特定的事件有关的属性和方法,触发的事件类类型不一样,可以使用的事件对象上的属性和方法也不一样。不过所有事件都会有一下列出的成员“
属性/方法 | 类型 | 读写 | 说明 |
---|---|---|---|
bubbles | boolean | 只读 | 表明事件是否冒泡 |
cancleable | boolean | 只读 | 表明是否可以取消事件的默认行为 |
currentTarget | Element | 只读 | 表明事件处理程序当前正在处理事件的那个元素 |
defaultPrevented | boolean | 只读 | 为true表明调用了preventDefault()(DOM3级事件新增) |
detail | Integer | 只读 | 表明与事件相关的细节信息 |
eventPhase | Integer | 只读 | 调用事件处理程序的阶段:1、捕获阶段;2、处于目标阶段;3、冒泡阶段 |
preventDefault() | Function | 只读 | 取消事件的默认行为,如果cancelable 为true,则可以使用该方法 |
stopImmediatePropagation() | Function | 只读 | 取消事件的进一步捕获或冒泡,同时阻止任何事件处理程序被调用(DOM3级新增) |
stopPropagation() | Function | 只读 | 取消事件的进一步捕获或冒泡,如果bubbles为true的话可以使用这个方法 |
target | Element | 只读 | 事件的目标,currentTarge表示当前的事件阶段的目标 |
type | String | 只读 | 事件触发的类型 |
view | AbstractView | 只读 | 与事件有关联的抽象视图,等同于发生事件的window对象 |
在事件处理程序内部,对象this始终等同于currentTarget的值,而target则是包含事件的实际目标,如果将事件处理程序制定给了目标元素,则this,currentTarge,target包含的是相同的值。
注意:当事件处理程序执行完后,事件对象会被销毁。
- IE中的事件对象
在IE中访问事件对象的几种不同方式,取决于绑定事件处理程序的方式。在DOM0级方法添加事件处理程序时,event对象作为window对象的属性存在。
var btn = document.getElementById('btn')
btn.onclick = function() {
var event = window.event
console.log(event.type)
}
如果事件处理程序是使用attachEvent()方法添加的没那么就会有一个event对象作为参数传到事件处理程序的函数参数列表中。
var btn = document.getElementById('btn')
btn.attachEvent('click', function(event){
console.log(event.type)
}, false)
在IE的所有事件对象都会包含以下属性和方法:
属性/方法 | 类型 | 读写 | 说明 |
---|---|---|---|
cancelBubble | boolean | 读写 | 默认值为false,但将其设置为true可以取消事件冒泡,和stopPropagation()一样 |
returnValue | boolean | 读写 | 默认为true,设置为false就可以取消事件的默认行为,和preventDefault()作用一样 |
scrElement | Element | 只读 | 事件目标,和target一样 |
type | string | 只读 | 表示触发的事件类型 |