這章節要講解的是:.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>
」的範圍