在觸發(fā)DOM上的某個(gè)事件時(shí),會(huì)產(chǎn)生一個(gè)事件對(duì)象event,這個(gè)對(duì)象中包含著所有與事件有關(guān)的信息。
DOM中的事件對(duì)象
兼容DOM的瀏覽器會(huì)將一個(gè)event對(duì)象傳入到事件處理程序中,無(wú)論指定事件處理程序時(shí)是DOM0級(jí)事件還是DOM2級(jí)事件,都會(huì)傳入event對(duì)象。
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對(duì)象包含與創(chuàng)建它的特定的事件有關(guān)的屬性和方法,觸發(fā)的事件類(lèi)類(lèi)型不一樣,可以使用的事件對(duì)象上的屬性和方法也不一樣。不過(guò)所有事件都會(huì)有一下列出的成員“
| 屬性/方法 | 類(lèi)型 | 讀寫(xiě) | 說(shuō)明 |
|---|---|---|---|
| bubbles | boolean | 只讀 | 表明事件是否冒泡 |
| cancleable | boolean | 只讀 | 表明是否可以取消事件的默認(rèn)行為 |
| currentTarget | Element | 只讀 | 表明事件處理程序當(dāng)前正在處理事件的那個(gè)元素 |
| defaultPrevented | boolean | 只讀 | 為true表明調(diào)用了preventDefault()(DOM3級(jí)事件新增) |
| detail | Integer | 只讀 | 表明與事件相關(guān)的細(xì)節(jié)信息 |
| eventPhase | Integer | 只讀 | 調(diào)用事件處理程序的階段:1、捕獲階段;2、處于目標(biāo)階段;3、冒泡階段 |
| preventDefault() | Function | 只讀 | 取消事件的默認(rèn)行為,如果cancelable 為true,則可以使用該方法 |
| stopImmediatePropagation() | Function | 只讀 | 取消事件的進(jìn)一步捕獲或冒泡,同時(shí)阻止任何事件處理程序被調(diào)用(DOM3級(jí)新增) |
| stopPropagation() | Function | 只讀 | 取消事件的進(jìn)一步捕獲或冒泡,如果bubbles為true的話(huà)可以使用這個(gè)方法 |
| target | Element | 只讀 | 事件的目標(biāo),currentTarge表示當(dāng)前的事件階段的目標(biāo) |
| type | String | 只讀 | 事件觸發(fā)的類(lèi)型 |
| view | AbstractView | 只讀 | 與事件有關(guān)聯(lián)的抽象視圖,等同于發(fā)生事件的window對(duì)象 |
在事件處理程序內(nèi)部,對(duì)象this始終等同于currentTarget的值,而target則是包含事件的實(shí)際目標(biāo),如果將事件處理程序制定給了目標(biāo)元素,則this,currentTarge,target包含的是相同的值。
注意:當(dāng)事件處理程序執(zhí)行完后,事件對(duì)象會(huì)被銷(xiāo)毀。
- IE中的事件對(duì)象
在IE中訪(fǎng)問(wèn)事件對(duì)象的幾種不同方式,取決于綁定事件處理程序的方式。在DOM0級(jí)方法添加事件處理程序時(shí),event對(duì)象作為window對(duì)象的屬性存在。
var btn = document.getElementById('btn')
btn.onclick = function() {
var event = window.event
console.log(event.type)
}
如果事件處理程序是使用attachEvent()方法添加的沒(méi)那么就會(huì)有一個(gè)event對(duì)象作為參數(shù)傳到事件處理程序的函數(shù)參數(shù)列表中。
var btn = document.getElementById('btn')
btn.attachEvent('click', function(event){
console.log(event.type)
}, false)
在IE的所有事件對(duì)象都會(huì)包含以下屬性和方法:
| 屬性/方法 | 類(lèi)型 | 讀寫(xiě) | 說(shuō)明 |
|---|---|---|---|
| cancelBubble | boolean | 讀寫(xiě) | 默認(rèn)值為false,但將其設(shè)置為true可以取消事件冒泡,和stopPropagation()一樣 |
| returnValue | boolean | 讀寫(xiě) | 默認(rèn)為true,設(shè)置為false就可以取消事件的默認(rèn)行為,和preventDefault()作用一樣 |
| scrElement | Element | 只讀 | 事件目標(biāo),和target一樣 |
| type | string | 只讀 | 表示觸發(fā)的事件類(lèi)型 |