這章節要講解的是:.addEventListener的第三個參數,為什麼要寫false呢?
html:
1 | <div class="box"></div> |
css:
1 | .box{ |

JS:
🎃 建立變數el,來選取.box
🎃 用.addEventListener綁定「click事件」
1 | var el = document.querySelector('.box'); |
🍋 點擊.box會跳出 alert
🍋 Console 也有出現「box」

點擊<body>
現在,我在<body>也用.addEventListener綁定一個「click事件」
html:
1 | <body class="body"> |
false (事件氣泡 Event Bubbling)
🎃 .addEventListener的第三個參數,寫false代表:從指定元素往外層找
🍋 寫false又稱為「事件氣泡 Event Bubbling」:從「點擊的那個元素」,開始「往外」冒泡泡
🍋 如果第三個參數沒有寫,預設就會是false
JS:
🎃 .addEventListener的第三個參數,寫false
1 | // .box 的「click 事件」 |
當我點擊.box時,除了觸發「.box的“click 事件”」,也會同時觸發「<body>的“click 事件”」
🍋 先跳出alert('box');

🍋 再跳出alert('body');

原因為:
所有的元素都是在<body>裡面在點擊.box後,就會一層一層往外找–> 找到<body>–> 再找到 document 為止
🎃 .addEventListener的第三個參數,寫false代表:從指定元素往外層找
🔔 為什麼要往外找?
除了「點擊的那個元素」之外,一定還有東西把元素層層包住,所以會一直往外層找,直到「最外層」為止–> .box的最外層就是<body>
true (事件捕捉 Event Capturing )
🎃 .addEventListener的第三個參數,寫true代表:從「最外層 document」找到「指定元素」
🍋 寫true又稱為「事件捕捉 Event Capturing」:要從「大草原(<body>)」,找到裡面的小動物(指定的元素)
🍋 true的使用時機:有時候在寫系統時,會需要先知道「外層的狀況」,再慢慢「往內」提供資訊
JS:
🎃 .addEventListener的第三個參數,寫true
1 | // .box 的「click 事件」 |
因為會從「最外層 document」找到「指定元素」,所以就會:
🍋 先跳出alert('body');

🍋 再跳出alert('box');

元素都是「互相重疊的」
html:
1 | <ul> |

當我點擊「<a></a>」時,也同時會點擊到「<li></li> 和 <ul></ul> 和 <body></body>」的範圍