js中事件是如何傳播的餐胀?

小歷史:

事件傳播的不同還要從早先的兩家瀏覽器巨頭說起,網(wǎng)景和IE為了能爭奪市場瘤载,互相使用相反的技術(shù)否灾,當(dāng)網(wǎng)景使用事件捕獲流的時候,IE則使用事件冒泡流鸣奔。后來W3C為了能規(guī)范規(guī)定墨技,直接折中惩阶,當(dāng)事件發(fā)生時,先發(fā)生向下傳播健提,當(dāng)?shù)降琢艘院笤俅问褂檬录芭萘彰ǎ饾u的冒泡到根節(jié)點伟叛。

事件傳播分三個階段:

DOM事件流(event flow )存在三個階段:事件捕獲階段私痹、處于目標(biāo)階段、事件冒泡階段统刮。

  • 在事件捕獲階段紊遵,事件從document對象沿著文檔樹向下傳播給目標(biāo)節(jié)點。如果目標(biāo)的任何一個祖先注冊了捕捉事件句柄侥蒙,那么在事件傳播的過程中暗膜,就會運(yùn)行這些句柄(IE10及以下不支持捕獲型事件)。
  • 目標(biāo)階段發(fā)生在目標(biāo)節(jié)點自身鞭衩,這與0級事件模型提供的事件處理方法類似学搜。
  • 事件冒泡階段,在這個階段论衍,事件將從目標(biāo)元素向上傳播回(像冒泡)Document對象的文檔層次(IE8 及以下沒有捕獲階段)瑞佩。


    事件傳播示意圖

無論是事件捕獲還是事件冒泡,它們都有一個共同的行為坯台,就是事件傳播炬丸,它就像一跟引線,只有通過引線才能將綁在引線上的鞭炮(事件監(jiān)聽器)引爆蜒蕾,試想一下稠炬,如果引線不導(dǎo)火了,那鞭炮就只有一響了_浞取J灼簟!

dom標(biāo)準(zhǔn)事件流的觸發(fā)的先后順序為:先捕獲再冒泡撤摸,即當(dāng)觸發(fā)dom事件時闽坡,會先進(jìn)行事件捕獲,捕獲到事件源之后通過事件傳播進(jìn)行事件冒泡愁溜。

事件監(jiān)聽

與這兩個事件密切相關(guān)的是addEventListener疾嗅、attachEvent:

addEventListener(event, listener, useCapture)

參數(shù)定義:
event---(事件名稱,如click冕象,不帶on)
listener---事件監(jiān)聽函數(shù)
useCapture---是否采用事件捕獲進(jìn)行事件捕捉代承,默認(rèn)為false,即采用事件冒泡方式
addEventListener在 IE11渐扮、Chrome 论悴、Firefox掖棉、Safari等瀏覽器都得到支持。

attachEvent(event,listener)

參數(shù)定義:
event---(事件名稱膀估,如onclick幔亥,帶on)
listener---事件監(jiān)聽函數(shù)。
attachEvent主要用于IE瀏覽器察纯,并且僅在IE10及以下才支持帕棉,IE11已經(jīng)不在使用這個方法。

阻止事件冒泡

w3c的方法是e.stopPropagation()饼记,IE則是使用e.cancelBubble = true

evt.stopPropagation();
evt.cancelBubble = true;

在處理瀏覽器兼容問題時香伴,可以這樣:

if(evt.stopPropagation){
    evt.stopPropagation();
}else{
    evt.cancelBubble = true;
}

還有一種以阻止默認(rèn)事件的方式去阻止冒泡行為

return false

區(qū)別

  • event.stopPropagation();
    事件處理過程中,阻止了事件冒泡具则,但不會阻擊默認(rèn)行為

  • return false;
    事件處理過程中即纲,阻止了事件冒泡,也阻止了默認(rèn)行為

  • event.preventDefault();
    它的作用是:事件處理過程中博肋,不阻擊事件冒泡低斋,但阻擊默認(rèn)行為

————愿你在迷茫時,堅信你的珍貴匪凡,愛你所愛膊畴,行你所行,聽從你心锹雏,無問西東巴比。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市礁遵,隨后出現(xiàn)的幾起案子轻绞,更是在濱河造成了極大的恐慌,老刑警劉巖佣耐,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件政勃,死亡現(xiàn)場離奇詭異,居然都是意外死亡兼砖,警方通過查閱死者的電腦和手機(jī)奸远,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來讽挟,“玉大人懒叛,你說我怎么就攤上這事〉⒚罚” “怎么了薛窥?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我诅迷,道長佩番,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任罢杉,我火速辦了婚禮趟畏,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘滩租。我一直安慰自己赋秀,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布持际。 她就那樣靜靜地躺著沃琅,像睡著了一般哗咆。 火紅的嫁衣襯著肌膚如雪蜘欲。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天晌柬,我揣著相機(jī)與錄音姥份,去河邊找鬼。 笑死年碘,一個胖子當(dāng)著我的面吹牛澈歉,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播屿衅,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼埃难,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了涤久?” 一聲冷哼從身側(cè)響起涡尘,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎响迂,沒想到半個月后考抄,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蔗彤,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年川梅,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片然遏。...
    茶點故事閱讀 39,795評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡贫途,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出待侵,到底是詐尸還是另有隱情丢早,我是刑警寧澤,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布诫给,位于F島的核電站香拉,受9級特大地震影響啦扬,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜凫碌,卻給世界環(huán)境...
    茶點故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一扑毡、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧盛险,春花似錦瞄摊、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至鹤啡,卻和暖如春惯驼,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背递瑰。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工祟牲, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人抖部。 一個月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓说贝,卻偏偏與公主長得像,于是被迫代替她去往敵國和親慎颗。 傳聞我的和親對象是個殘疾皇子乡恕,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,724評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 以下文章為轉(zhuǎn)載,對理解JavaScript中的事件處理機(jī)制很有幫助俯萎,淺顯易懂傲宜,特分享于此。 什么是事件讯屈? 事件(E...
    jxyjxy閱讀 3,035評論 1 10
  • ??JavaScript 與 HTML 之間的交互是通過事件實現(xiàn)的涮母。 ??事件谆趾,就是文檔或瀏覽器窗口中發(fā)生的一些特...
    霜天曉閱讀 3,490評論 1 11
  • js之事件機(jī)制 1、事件初探 1.1 js事件的概述 JavaScript事件:JavaScript是基于事件驅(qū)動...
    道無虛閱讀 2,356評論 1 3
  • 聲明:本文來源于http://www.webzsky.com/?p=731我只是在這里作為自己的學(xué)習(xí)筆記整理一下(...
    angryyan閱讀 7,010評論 1 6
  • JavaScript 程序采用了異步事件驅(qū)動編程模型叛本。在這種程序設(shè)計風(fēng)格下沪蓬,當(dāng)文檔、瀏覽器来候、元素或與之相關(guān)的對象發(fā)...
    劼哥stone閱讀 1,256評論 3 11