JS事件冒泡和事件捕獲

談起JavaScript的 事件旨别,事件冒泡、事件捕獲、阻止默認事件這三個話題被饿,無論是面試還是在平時的工作中四康,都很難避免。

事件捕獲階段:事件從最上一級標簽開始往下查找狭握,直到捕獲到事件目標(target)闪金。

事件冒泡階段:事件從事件目標(target)開始,往上冒泡直到頁面的最上一級標簽论颅。

1哎垦、冒泡事件:

事件按照從最特定的事件目標到最不特定的事件目標(document對象)的順序觸發(fā)。通俗來講就是恃疯,就是當設(shè)定了多個div的嵌套時漏设;即建立了父子關(guān)系,當父div與子div共同加入了onclick事件時澡谭,當觸發(fā)了子div的onclick事件后愿题,子div進行相應(yīng)的js操作,但是父div的onclick事件同樣會被觸發(fā)蛙奖。

html:

<div>

<input type="button" value="事件冒泡"/>

</div>

js:

????var $input = document.getElementsByTagName("input")[0];

?????var $div = document.getElementsByTagName("div")[0];

?????var $body = document.getElementsByTagName("body")[0];

?????$input.onclick = function(e){

????????????this.style.border = "5px solid red"

????????????var e = e || window.e;

????????????alert("red")

??????}

??????$div.onclick = function(e){

????????????this.style.border = "5px solid green"

????????????alert("green")

??????}

??????$body.onclick = function(e){

????????????this.style.border = "5px solid yellow"

????????????alert("yellow")

??????}

效果:依次彈出”red“,"green","yellow"潘酗。這就是事件冒泡:觸發(fā)button這個元素,卻連同父元素綁定的事件一同觸發(fā)雁仲。

2仔夺、阻止事件冒泡

如果對input的事件綁定改為:

$input.onclick = function(e){

????this.style.border = "5px solid red"

????var e = e || window.e;

????alert("red")

????e.stopPropagation();

}

這個時候只會彈出”red“,因為阻止了事件冒泡攒砖。

3缸兔、事件捕獲

從頂層元素到目標元素或者從目標元素到頂層元素,和事件冒泡是一個相反的過程吹艇。事件從最不精確的對象(document 對象)開始觸發(fā)惰蜜,然后到最精確(也可以在窗口級別捕獲事件,不過必須由開發(fā)人員特別指定)受神。

$input.addEventListener("click", function(){

????this.style.border = "5px solid red";

????alert("red")

}, true)

$div.addEventListener("click", function(){

????this.style.border = "5px solid green";

????alert("green")

}, true)

$body.addEventListener("click", function(){

????this.style.border = "5px solid yellow";

????alert("yellow")

}, true)

這個時候依次彈出”yellow“,"green","red"抛猖。這就是事件的捕獲。

如果把addEventListener方法的第三個參數(shù)改成false鼻听,則表示只在冒泡的階段觸發(fā)财著,彈出的依次為:”red“,"green","yellow"。這是因為在W3C模型中撑碴,任何事件發(fā)生時撑教,先從頂層開始進行事件捕獲,直到事件觸發(fā)到達了事件源元素醉拓。然后伟姐,再從事件源往上進行事件冒泡收苏,直到到達document。

程序員可以自己選擇綁定事件時采用事件捕獲還是事件冒泡愤兵,方法就是綁定事件時通過addEventListener函數(shù)倒戏,它有三個參數(shù),第三個參數(shù)若是true恐似,則表示采用事件捕獲,若是false傍念,則表示采用事件冒泡矫夷。

ele.addEventListener('click',doSomething2,true)

true=捕獲

false=冒泡

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市憋槐,隨后出現(xiàn)的幾起案子双藕,更是在濱河造成了極大的恐慌,老刑警劉巖阳仔,帶你破解...
    沈念sama閱讀 216,651評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件忧陪,死亡現(xiàn)場離奇詭異,居然都是意外死亡近范,警方通過查閱死者的電腦和手機嘶摊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,468評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來评矩,“玉大人叶堆,你說我怎么就攤上這事〕舛牛” “怎么了虱颗?”我有些...
    開封第一講書人閱讀 162,931評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長蔗喂。 經(jīng)常有香客問我忘渔,道長,這世上最難降的妖魔是什么缰儿? 我笑而不...
    開封第一講書人閱讀 58,218評論 1 292
  • 正文 為了忘掉前任畦粮,我火速辦了婚禮,結(jié)果婚禮上返弹,老公的妹妹穿的比我還像新娘锈玉。我一直安慰自己,他們只是感情好义起,可當我...
    茶點故事閱讀 67,234評論 6 388
  • 文/花漫 我一把揭開白布拉背。 她就那樣靜靜地躺著,像睡著了一般默终。 火紅的嫁衣襯著肌膚如雪椅棺。 梳的紋絲不亂的頭發(fā)上犁罩,一...
    開封第一講書人閱讀 51,198評論 1 299
  • 那天,我揣著相機與錄音两疚,去河邊找鬼床估。 笑死,一個胖子當著我的面吹牛诱渤,可吹牛的內(nèi)容都是我干的丐巫。 我是一名探鬼主播,決...
    沈念sama閱讀 40,084評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼勺美,長吁一口氣:“原來是場噩夢啊……” “哼递胧!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起赡茸,我...
    開封第一講書人閱讀 38,926評論 0 274
  • 序言:老撾萬榮一對情侶失蹤缎脾,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后占卧,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體遗菠,經(jīng)...
    沈念sama閱讀 45,341評論 1 311
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,563評論 2 333
  • 正文 我和宋清朗相戀三年华蜒,在試婚紗的時候發(fā)現(xiàn)自己被綠了辙纬。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,731評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡友多,死狀恐怖牲平,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情域滥,我是刑警寧澤纵柿,帶...
    沈念sama閱讀 35,430評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站启绰,受9級特大地震影響昂儒,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜委可,卻給世界環(huán)境...
    茶點故事閱讀 41,036評論 3 326
  • 文/蒙蒙 一渊跋、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧着倾,春花似錦拾酝、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,676評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至崇决,卻和暖如春材诽,著一層夾襖步出監(jiān)牢的瞬間底挫,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,829評論 1 269
  • 我被黑心中介騙來泰國打工脸侥, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留建邓,地道東北人。 一個月前我還...
    沈念sama閱讀 47,743評論 2 368
  • 正文 我出身青樓睁枕,卻偏偏與公主長得像官边,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子外遇,可洞房花燭夜當晚...
    茶點故事閱讀 44,629評論 2 354

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

  • "use strict";function _classCallCheck(e,t){if(!(e instanc...
    久些閱讀 2,029評論 0 2
  • 布爾操作符!false //true!"blue" //false!0 //true!NaN //true!...
    左錢錢閱讀 396評論 0 0
  • 1. dom對象的innerText和innerHTML有什么區(qū)別臀规? innerText用于獲取元素內(nèi)的文本內(nèi)容;...
    王康_Wang閱讀 243評論 0 0
  • 我不喜歡下雨天,可我所在的城市卻偏偏細雨綿綿栅隐。我多希望明天可以看到晴空萬里塔嬉。那樣我應(yīng)該就不會像現(xiàn)在這樣壓抑 這樣的...
    我就是大表哥閱讀 1,086評論 0 1
  • 這兩天家里在鬧分家,老公的心情是郁悶至極租悄。在外拼搏18年谨究,為誰辛苦為誰忙?幾乎所有賺回來的錢都寄回了他家中泣棋,原以為...
    雪紛閱讀 507評論 10 8