1.干預系統(tǒng)的事件處理機制
(一)DOM事件流
DOM模型是一個樹形結構手幢,在DOM模型中,HTML元素是有層次的围来。當一個HTML元素上產(chǎn)生一個事件時监透,該事件會在DOM樹中元素節(jié)點與根節(jié)點之間按特定的順序傳播,路徑所經(jīng)過的節(jié)點都會收到該事件院刁,這個傳播過程就是DOM事件流。
DOM事件標準定義了兩種事件流醇滥,分別是捕獲事件和冒泡事件黎比。
1.冒泡事件流
默認情況下超营,事件使用冒泡事件流鸳玩。當事件(例如單擊事件)在某一DOM元素上被觸發(fā)時,事件將沿著該節(jié)點的各個父結點冒泡穿過整個DOM節(jié)點層次演闭。在冒泡過程中的任何時候都可以終止事件的冒泡不跟。如果不停止事件的傳播,事件將一直通過DOM冒泡直至到達文檔根米碰。
2.捕獲事件流
于冒泡模型相反窝革,在捕獲事件流模型中购城,事件的處理將從DOM層次的根開始,而不是從觸發(fā)事件的目標元素開始虐译,事件被從目標元素的所有所有祖先元素依次往下傳遞。在這個過程中漆诽,事件會被從文檔的根到事件目標元素之間各個繼承派生的元素所捕獲侮攀。
3.DOM標準的事件模型
DOM標準同時支持捕獲事件模型和冒泡事件模型,但是厢拭,捕獲事件模型先發(fā)生兰英。兩種事件流都會觸發(fā)DOM中的所有對象,從document對象開始供鸠,也在document對象結束畦贸。
4.事件傳導的3個階段
(1)事件捕捉(Capturing)階段:事件將沿著DOM樹向下傳送,經(jīng)過目標節(jié)點的每一個祖先節(jié)點楞捂,直至目標節(jié)點薄坏。例如,用戶單擊了一個超鏈接寨闹,則該單擊事件將從document節(jié)點轉送到html元素颤殴、body元素以及包含該鏈接的p元素。目標節(jié)點就是觸發(fā)事件的DOM節(jié)點鼻忠。
(2)目標(target)階段:在此階段中涵但,事件傳導到目標節(jié)點。瀏覽器在查找到已經(jīng)指定給目標事件的監(jiān)聽器后帖蔓,就會運行該監(jiān)聽器矮瘟。
(3)冒泡(Bubbling)階段:事件將沿著DOM樹向上轉送,再次逐個訪問目標元素的祖先節(jié)點直到document節(jié)點塑娇。該過程中的每一步澈侠,瀏覽器都將檢測那些不是捕捉事件監(jiān)聽器的事件監(jiān)聽器并執(zhí)行它們。(即:與觸發(fā)事件無關的事件監(jiān)聽器也由于冒泡將被執(zhí)行)埋酬。
二)停止事件冒泡
當事件(例如單擊事件)在某一DOM元素上被觸發(fā)時哨啃,事件將沿著該節(jié)點的各個父節(jié)點冒泡穿過整個DOM節(jié)點層次,直到遇到依附有該事件類型處理器的節(jié)點写妥。
(三)阻止事件的默認行為
事件的默認行為是指瀏覽器在事件傳遞和處理完成后自動執(zhí)行的與該事件關聯(lián)的默認動作拳球。例如,單擊一個超鏈接的默認行為是訪問其定義的url珍特。
IE和其他瀏覽器阻止事件的默認行為的方法不同祝峻。在IE中,可以通過設置event對象的returnValue屬性為false來阻止事件的默認行為;在其他瀏覽器中莱找,則可以通過設置event對象的preventDefault()方法來實現(xiàn)酬姆。