成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

DOM事件

AlphaGooo / 889人閱讀

摘要:與之間的交互是通過事件實(shí)現(xiàn)的。而,則將事件一直冒泡到對象。事件處理程序的名字以開頭,例如。級事件處理程序通過指定事件處理程序的傳統(tǒng)方式,就是將一個(gè)函數(shù)賦值給一個(gè)事件處理程序?qū)傩?。變?dòng)事件在結(jié)構(gòu)發(fā)生變化時(shí)觸發(fā),比如插入或者刪除節(jié)點(diǎn)。

javascript與HTML之間的交互是通過事件實(shí)現(xiàn)的。事件就是文檔或者瀏覽器中發(fā)生的一些特定的交互瞬間。

事件流

事件流描述的是頁面接受事件的順序,而IE和Netscape的瀏覽器開發(fā)團(tuán)隊(duì)提出了兩種截然不同的,甚至是完全相反的事件流概念。IE的事件流是事件冒泡,而Netscape的事件流是事件捕獲。

事件冒泡

即事件開始時(shí)又最具體的元素接受,然后逐級向上傳播,現(xiàn)代的所有瀏覽器都支持事件冒泡,但是在具體實(shí)現(xiàn)上還是有些差別的,IE5.5及更早的版本中事件冒泡會(huì)跳過元素(從直接到document)。而IE9, Firefox,Chrome,Safari則將事件一直冒泡到window對象。

事件捕獲

事件捕獲的用意在于事件到達(dá)預(yù)定目標(biāo)之前就捕獲它,在事件捕獲過程中,document對象先接受到click事件,然后事件沿著DOM樹依次向下,一直傳播到事件的具體目標(biāo)。

DOM事件流

DOM2級事件(關(guān)于Dom0 Dom2 Dom3請參考這里)規(guī)定的事件流包括三個(gè)階段:事件捕獲階段,處于目標(biāo)階段,和事件冒泡階段。在Dom事件流中,實(shí)際的目標(biāo)元素在捕獲階段是不會(huì)接受事件的,這意味著在捕獲階段,事件從document到再到后就停止了。下一個(gè)階段是“處于目標(biāo)”階段,于是事件在

上發(fā)生,并在事件處理中被看成冒泡階段的一部分。然后冒泡階段發(fā)生,事件又傳播回文檔。

事件處理程序

事件就是用戶或者瀏覽器執(zhí)行的某個(gè)動(dòng)作,例如click,load,mouseover都是事件的名字。而相應(yīng)某個(gè)事件的函數(shù)叫做事件處理程序。事件處理程序的名字以on開頭,例如onclick,onload。

HTML事件處理程序

每個(gè)元素支持的每種事件,都可以使用一個(gè)與響應(yīng)事件處理程序同名的HTML特性來制定,這個(gè)特性的值應(yīng)該是能夠執(zhí)行的HTML代碼。

Dom0級事件處理程序

通過JavaScript指定事件處理程序的傳統(tǒng)方式,就是將一個(gè)函數(shù)賦值給一個(gè)事件處理程序?qū)傩浴?/p>

var btn = document.getElementById("btn")
btn.onclick = function() {
    alert("clicked")
}

使用Dom0級事件處理程序被認(rèn)為是元素的方法,此時(shí)程序中的this會(huì)引用當(dāng)前元素。同時(shí)以這種方式添加的事件處理程序會(huì)在冒泡階段被處理。

Dom2級事件處理程序

Dom2級事件定義了兩個(gè)方法,addEventListener()和removeEventListener(),所有的Dom節(jié)點(diǎn)中都包含著兩個(gè)方法,它們都是接受三個(gè)參數(shù),要處理的事件名,事件處理函數(shù),和一個(gè)布爾值(為true的時(shí)候表示在捕獲階段調(diào)用事件處理程序,false表示在冒泡階段調(diào)用事件處理程序)

var btn = document.getElementById("btn")
btn.addEventListener("click", function(){
    alert(this.value)    
}, false)
IE事件處理程序

IE中實(shí)現(xiàn)了與DOM中類似的兩個(gè)方法,attachEvent()和detachEvent()。這兩個(gè)方法接受相同的參數(shù),事件處理程序名稱,事件處理程序函數(shù),由于在IE8以前不支持事件冒泡,所以事件處理程序函數(shù)會(huì)在冒泡階段執(zhí)行。

var btn = document.getElementById("btn")
btn.attachEvent("ocClick", function() {
    alert("clicked")
})

此時(shí)在事件處理程序函數(shù)會(huì)在全局作用域中執(zhí)行,也就是說此事的this是window。
同時(shí)如果為同一個(gè)元素同時(shí)添加了兩個(gè)不同的事件處理程序,這些事件處理程序并不是順序執(zhí)行的而是以相反的順序被觸發(fā)。

事件對象event

在觸發(fā)Dom上的某個(gè)事件的時(shí)候,會(huì)產(chǎn)生一個(gè)事件對象event,這個(gè)對象包含著與事件有關(guān)的信息。

Dom事件對象

兼容Dom的瀏覽器會(huì)將一個(gè)event對象傳到事件處理程序中。

var btn = document.getElementById("btn")
btn.onclick = function(event) {
    alert(event.type)
}

當(dāng)我們想要阻止某個(gè)事件的特定行為時(shí)可以使用event對象的preventDefault()方法,而stopPropagation()方法則用于立即停止事件在DOM中的傳播,即取消進(jìn)一步的事件冒泡或者捕獲。

IE中的事件對象

要訪問IE中的event對象有幾種不同的方式,在使用DOM0級方法添加事件處理程序時(shí),event對象作為window對像的一個(gè)屬性存在。

var btn = document.getElementById("btn")
btn.onclick = function() {
    var event = window.event
    alert(event.type)
}

但是當(dāng)我們用attachEvent的方式添加的,此時(shí)的event對象會(huì)被當(dāng)作一個(gè)參數(shù)傳入事件處理程序中。當(dāng)時(shí)此時(shí)也可以通過window對象來訪問event對象。
在event對象中有一個(gè)srcElement屬性,指向事件的目標(biāo)對象,因?yàn)槭录奶幚沓绦虻淖饔糜蚴歉鶕?jù)指定它的方式來確定的,所以this并不總是等于目標(biāo)對象。此時(shí)為了保險(xiǎn)起見,建議使用srcElement

btn.onclick = function() {
    alert(window.event.srcElement) === this; //ture
}
btn.attachEvent("onclick", function(event) {
    alert(event.srcElement === this); //false
})
事件類型

Web瀏覽器中可能發(fā)生的事件類型有很多,不同的事件類型可能具有不同的信息。而DOM3級事件規(guī)定了一下幾類事件。

UI事件
UI事件指的是那些不一定與用戶操作有關(guān)的事件。比如load事件,當(dāng)頁面完全加載后在window上面觸發(fā),當(dāng)圖片加載完畢在元素上觸發(fā)。以及腳本加載完畢在

閱讀需要支付1元查看
<