用 stopPropagation 來「中止事件傳播」
html:
1 | <body class="body"> |
JS:
1 | // .box 的「click 事件」 |
🎃 因為.addEventListener
的第三個參數寫false
,所以–> 會從「指定元素」往外層執行“監聽事件”
當我點擊.box
時,除了觸發「.box
的“click 事件”」,也會同時觸發「<body>
的“click 事件”」
🍋 先跳出alert('box');
🍋 再跳出alert('body');
‼️ 但是,現在我希望只觸發「.box
的“click 事件”」就好,不要再繼續往外層去觸發「<body>
的“click 事件”」
只執行“指定元素”的事件
在.addEventListener
的第三個參數是寫「false
」的情況下:
🎃 用e.stopPropagation();
來「中止事件傳播」–> 當元素「互相重疊」時,只執行“指定元素”的事件,不會再繼續往外層執行“監聽事件”
作法如下:
在.box
的「click 事件」
🎃 在function
小括號裡面,加上「e
」
🍋 加上「e
」原因為:會需要「執行 event 當下」相關的資料,e
會是一個「物件」
📖 為什麼需要e
來「撈出“事件的詳細資訊”」?
原因為:把「.box
click 事件」的詳細資訊撈出來後,用e.stopPropagation();
來告訴瀏覽器–> 只需要執行.box
的事件即可,不用再繼續往外層執行“監聽事件”
🍋 Propagation 是「傳播」的意思
JS:
1 | // .box 的「click 事件」 |
加上e.stopPropagation();
之後,
當我點擊.box
🍋 就只會跳出alert('box');
🍋 不會再跳出alert('body');
了
只執行“最外層元素”的事件
在.addEventListener
的第三個參數是寫「true
」的情況下:
🎃 用e.stopPropagation();
來「中止事件傳播」–> 當元素「互相重疊」時,只執行“最外層元素”的事件,不會再繼續往內層執行“監聽事件”
JS:
1 | // .box 的「click 事件」 |