關(guān)于JavaScript的addEventListener第三個參數(shù)的注記

Mozilla瀏覽器提供了一個JavaScript的綁定事件監(jiān)聽器的函數(shù)addEventListener

document.getElementById("button1").addEventListener("click",callback,isCapture);

其中各個參數(shù)說明如下:

  • "click" 代表注冊的什么事件亏镰∽缑茫“click”代表的自然是點擊事件,注意前面不加“on”前綴宿接。也可以是其他事件嚼蚀,去掉“on”前綴即可。
  • callback 回調(diào)函數(shù)谤绳,當(dāng)事件被觸發(fā)時調(diào)用該函數(shù)。
  • isCapture 是否在捕獲階段執(zhí)行回調(diào)袒哥。默認(rèn)為false缩筛。

下面來說一下第三個參數(shù) isCapture。它是一個boolean類型的值堡称。說到它就不得不提一下JavaScript中的事件觸發(fā)經(jīng)歷的兩個階段:捕獲階段和冒泡階段瞎抛。

事件觸發(fā)經(jīng)歷的兩個階段

從圖中可見都是嵌套關(guān)系。我們假定點擊了最內(nèi)層的text元素却紧,觸發(fā)了它的onclick事件婿失。
但是實際上因為是嵌套的原因,點擊了最內(nèi)層的text也相當(dāng)于點擊了它的父元素div啄寡,也相當(dāng)于點擊了父元素的父元素body……也相當(dāng)于點擊了window,那么如果這些外層元素也有onclick的點擊事件哩照,它們也應(yīng)當(dāng)被觸發(fā)挺物,現(xiàn)在的問題是,是在什么時候被觸發(fā)飘弧?
圖中可見有兩個階段

  1. 先從最外面開始(也就是window開始)向內(nèi)推進(jìn)识藤,直到定位到觸發(fā)的元素text砚著。這一過程叫“捕獲過程”。
  2. 然后從該元素開始痴昧,又向上級冒泡稽穆。該過程為“冒泡過程”。

顯然赶撰,對于這個嵌套鏈上的每個元素舌镶,它的觸發(fā)按數(shù)即可以在捕獲階段被執(zhí)行,也可以在冒泡階段被執(zhí)行豪娜。

所以餐胀,addEventListener的第三個參數(shù)正是指定這個觸發(fā)時段的。默認(rèn)情況是false瘤载,也就是在冒泡階段被執(zhí)行否灾;如果指派為true,則在捕獲階段被執(zhí)行鸣奔。


用一個簡單的實驗可以說明問題:
假設(shè)現(xiàn)在一個HTML界面有三個呈嵌套關(guān)系的元素

 <div id="outer" >
    <div id="middle" >
      <input type="button" id="inner" value="inner"/>
    </div>
 </div>

最外層是outer墨技,中間是middle,內(nèi)部是inner挎狸。
下面是三個元素綁定點擊事件:

window.onload=function(){ 
    document.getElementById("inner").addEventListener("click",show("inner"),false); 
    document.getElementById("middle").addEventListener("click",show("middle"),false); 
    document.getElementById("outer").addEventListener("click",show("outer"),false); 
} 
function show(i){ 
    return function(){
        console.log(i);
    }
} 

點擊對應(yīng)元素扣汪,就會在控制臺打印出相應(yīng)信息。下面分別修改三個boolean參數(shù)伟叛,觀察輸出結(jié)果

輸出結(jié)果

OUTPUT的結(jié)果左邊先打印私痹,右邊后打印。我們舉兩個結(jié)果說明:

  • isCapture分別被設(shè)置為TFF的時候统刮,點擊最內(nèi)層inner的按鈕紊遵,由于outer、middle設(shè)置的為false侥蒙,那么它們在捕獲階段不會被觸發(fā)暗膜,控制流到達(dá)inner,此時先輸出inner鞭衩,然后開始返回学搜,也就是向上級冒泡,所以依次觸發(fā)middle论衍、outer瑞佩。
  • isCapture分別被設(shè)置為TTF的時候,點擊最內(nèi)層inner按鈕坯台,由于outer設(shè)置為false炬丸,那么它在進(jìn)入的階段不會被觸發(fā),但是當(dāng)遇到middle時候蜒蕾,因為是true稠炬,所以會被觸發(fā)焕阿,先輸出middle,然后輸出inner首启,最后在返回的冒泡階段暮屡,outer被觸發(fā),最后輸出outer毅桃。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末褒纲,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子疾嗅,更是在濱河造成了極大的恐慌外厂,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,681評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件代承,死亡現(xiàn)場離奇詭異汁蝶,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)论悴,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,205評論 3 399
  • 文/潘曉璐 我一進(jìn)店門掖棉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人膀估,你說我怎么就攤上這事幔亥。” “怎么了察纯?”我有些...
    開封第一講書人閱讀 169,421評論 0 362
  • 文/不壞的土叔 我叫張陵帕棉,是天一觀的道長。 經(jīng)常有香客問我饼记,道長香伴,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,114評論 1 300
  • 正文 為了忘掉前任具则,我火速辦了婚禮即纲,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘博肋。我一直安慰自己低斋,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 69,116評論 6 398
  • 文/花漫 我一把揭開白布匪凡。 她就那樣靜靜地躺著膊畴,像睡著了一般。 火紅的嫁衣襯著肌膚如雪病游。 梳的紋絲不亂的頭發(fā)上巴比,一...
    開封第一講書人閱讀 52,713評論 1 312
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼轻绞。 笑死,一個胖子當(dāng)著我的面吹牛佣耐,可吹牛的內(nèi)容都是我干的政勃。 我是一名探鬼主播,決...
    沈念sama閱讀 41,170評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼兼砖,長吁一口氣:“原來是場噩夢啊……” “哼奸远!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起讽挟,我...
    開封第一講書人閱讀 40,116評論 0 277
  • 序言:老撾萬榮一對情侶失蹤懒叛,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后耽梅,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體薛窥,經(jīng)...
    沈念sama閱讀 46,651評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,714評論 3 342
  • 正文 我和宋清朗相戀三年眼姐,在試婚紗的時候發(fā)現(xiàn)自己被綠了诅迷。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,865評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡众旗,死狀恐怖罢杉,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情贡歧,我是刑警寧澤滩租,帶...
    沈念sama閱讀 36,527評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站利朵,受9級特大地震影響律想,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜哗咆,卻給世界環(huán)境...
    茶點故事閱讀 42,211評論 3 336
  • 文/蒙蒙 一蜘欲、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧晌柬,春花似錦姥份、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,699評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至屿衅,卻和暖如春埃难,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,814評論 1 274
  • 我被黑心中介騙來泰國打工涡尘, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留忍弛,地道東北人。 一個月前我還...
    沈念sama閱讀 49,299評論 3 379
  • 正文 我出身青樓考抄,卻偏偏與公主長得像细疚,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子川梅,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,870評論 2 361

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

  • 前言:之前的上傳圖片用到了event.target疯兼,但是后來仔細(xì)思考了一下,自己對event.target贫途,thi...
    Ruby君閱讀 2,014評論 1 3
  • 如何批量操作 css 如何獲取 DOM 計算后的樣式 使用getComputedStyle獲取元素計算后的樣式 實...
    _Dot912閱讀 560評論 1 3
  • 事件流 定義:1.事件流描述的是從頁面中接收事件的順序,也可理解為事件在頁面中傳播的順序吧彪。2.事件就是用戶或瀏覽器...
    murphywuwu閱讀 462評論 4 4
  • 1、事件傳播機(jī)制丢早、阻止傳播姨裸、取消默認(rèn)事件、事件代理這些到底是什么呢香拉? ①事件傳播機(jī)制:JS事件傳播包括三個階段: ...
    海山城閱讀 293評論 0 0
  • 忘了珍惜 歲月總是催人老凫碌,又催人離開扑毡,繁忙也總是讓你忘卻一個人都會面臨的生死離別,一切都來得特別突然又那么的不真切...
    蒙氏愛豆閱讀 397評論 0 0