国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

《JavaScript 闖關(guān)記》之事件

ConardLi / 2647人閱讀

摘要:事件捕獲團(tuán)隊(duì)提出的另一種事件流叫做事件捕獲。所有節(jié)點(diǎn)中都包含這兩個方法,并且它們都接受個參數(shù)要處理的事件名作為事件處理程序的函數(shù)和一個布爾值。最后這個布爾值參數(shù)如果是,表示在捕獲階段調(diào)用事件處理程序如果是,表示在冒泡階段調(diào)用事件處理程序。

JavaScript 程序采用了異步事件驅(qū)動編程模型。在這種程序設(shè)計(jì)風(fēng)格下,當(dāng)文檔、瀏覽器、元素或與之相關(guān)的對象發(fā)生某些有趣的事情時,Web 瀏覽器就會產(chǎn)生事件(event)。例如,當(dāng) Web 瀏覽器加載完文檔、用戶把鼠標(biāo)指針移到超鏈接上或敲擊鍵盤時,Web 瀏覽器都會產(chǎn)生事件。如果 JavaScript 應(yīng)用程序關(guān)注特定類型的事件,那么它可以注冊當(dāng)這類事件發(fā)生時要調(diào)用的一個或多個函數(shù)。請注意,這種風(fēng)格并不只應(yīng)用于 Web 編程,所有使用圖形用戶界面的應(yīng)用程序都采用了它,它們靜待某些事情發(fā)生(即,它們等待事件發(fā)生),然后它們響應(yīng)。

請注意,事件本身并不是一個需要定義的技術(shù)名詞。簡而言之,事件就是 Web 瀏覽器通知應(yīng)用程序發(fā)生了什么事情,這種在傳統(tǒng)軟件工程中被稱為觀察員模式。

事件流

當(dāng)瀏覽器發(fā)展到第四代時(IE4 及 Netscape Communicator 4),瀏覽器開發(fā)團(tuán)隊(duì)遇到了一個很有意思的問題:頁面的哪一部分會擁有某個特定的事件?要明白這個問題問的是什么,可以想象畫在一張紙上的一組同心圓。如果你把手指放在圓心上,那么你的手指指向的不是一個圓,而是紙上的所有圓。兩家公司的瀏覽器開發(fā)團(tuán)隊(duì)在看待瀏覽器事件方面還是一致的。如果你單擊了某個按鈕,他們都認(rèn)為單擊事件不僅僅發(fā)生在按鈕上。換句話說,在單擊按鈕的同時,你也單擊了按鈕的容器元素,甚至也單擊了整個頁面。

事件流描述的是從頁面中接收事件的順序。但有意思的是,IE 和 Netscape 開發(fā)團(tuán)隊(duì)居然提出了差不多是完全相反的事件流的概念。IE 的事件流是事件冒泡流,而 Netscape Communicator 的事件流是事件捕獲流。

事件冒泡

IE 的事件流叫做事件冒泡(event bubbling),即事件開始時由最具體的元素(文檔中嵌套層次最深的那個節(jié)點(diǎn))接收,然后逐級向上傳播到較為不具體的節(jié)點(diǎn)(文檔)。以下面的HTML頁面為例:




    Event Bubbling Example


    
Click Me

如果你單擊了頁面中的

元素,那么這個 click 事件會按照如下順序傳播:

document

也就是說,click 事件首先在

元素上發(fā)生,而這個元素就是我們單擊的元素。然后,click 事件沿 DOM 樹向上傳播,在每一級節(jié)點(diǎn)上都會發(fā)生,直至傳播到 document 對象。下圖展示了事件冒泡的過程。

事件捕獲

Netscape Communicator 團(tuán)隊(duì)提出的另一種事件流叫做事件捕獲(event capturing)。事件捕獲的思想是不太具體的節(jié)點(diǎn)應(yīng)該更早接收到事件,而最具體的節(jié)點(diǎn)應(yīng)該最后接收到事件。事件捕獲的用意在于在事件到達(dá)預(yù)定目標(biāo)之前捕獲它。如果仍以前面的 HTML 頁面作為演示事件捕獲的例子,那么單擊

元素就會以下列順序觸發(fā) click 事件。

document

在事件捕獲過程中,document 對象首先接收到 click 事件,然后事件沿 DOM 樹依次向下,一直傳播到事件的實(shí)際目標(biāo),即

元素。下圖展示了事件捕獲的過程。

由于老版本的瀏覽器不支持,因此很少有人使用事件捕獲。我們也建議大家放心地使用事件冒泡,在有特殊需要時再使用事件捕獲。

事件處理程序

事件就是用戶或?yàn)g覽器自身執(zhí)行的某種動作。諸如 clickloadmouseover,都是事件的名字。而響應(yīng)某個事件的函數(shù)就叫做事件處理程序(或事件偵聽器)。事件處理程序的名字以 "on" 開頭,因此 click 事件的事件處理程序就是 onclickload 事件的事件處理程序就是 onload。為事件指定處理程序的方式有好幾種。

HTML 事件處理程序

某個元素支持的每種事件,都可以使用一個與相應(yīng)事件處理程序同名的 HTML 特性來指定。這個特性的值應(yīng)該是能夠執(zhí)行的 JavaScript 代碼。例如,要在按鈕被單擊時執(zhí)行一些 JavaScript,可以像下面這樣編寫代碼:

當(dāng)單擊這個按鈕時,就會在控制臺打印 "Clicked"。這個操作是通過指定 onclick 特性并將一些 JavaScript 代碼作為它的值來定義的。由于這個值是 JavaScript,因此不能在其中使用未經(jīng)轉(zhuǎn)義的 HTML 語法字符,例如和號(&)、雙引號("")、小于號(<)或大于號(>)。為了避免使用 HTML 實(shí)體,這里使用了單引號。如果想要使用雙引號,那么就要將代碼改寫成如下所示:

在 HTML 中定義的事件處理程序可以包含要執(zhí)行的具體動作,也可以調(diào)用在頁面其他地方定義的腳本,如下面的例子所示:


在這個例子中,單擊按鈕就會調(diào)用 showMessage() 函數(shù)。這個函數(shù)是在一個獨(dú)立的

閱讀需要支付1元查看
<