Day28:e.stopPropagation()停止事件冒泡


當事件發生的時候,如果想要阻擋事件向上傳遞,只要利用「事件物件」( Event Object )所提供的 e.stopProoagation() ,就可以阻止事件由觸發的元素向外冒泡。

當我們有兩個區塊,一個叫 inner ,一個叫 outer , inner 被包在 outer 中間。

<div class="outer">
  <div class="inner"></div>
</div>
.outer {
  width: 400px;
  height: 400px;
  background: red;
  margin: 0 auto 0;
}

.inner {
  width: 200px;
  height: 200px;
  background: yellow;
  margin: 0px auto 0px;
  transform: translateY(50%);
}
var elOuter = document.querySelector('.outer');
elOuter.addEventListener('click',function () {
  alert('outer');
},false);

var elInner = document.querySelector('.inner');

elInner.addEventListener('click',function () {
  alert('inner');
},false);

因為「事件冒泡」的關係,點擊 inner 會先跳出 「 inner 」的警告視窗,而 click 事件會傳遞到 outer 區塊,跟著跳出「 outer 」的警告視窗。

如果要阻止事件冒泡向上傳遞,就要在 addEventLister() 的 function(e){ } 參數裡面加上 e ,在 function 區塊前面加上 e.propagation ,這樣就能阻止事件向上傳遞了。

var elOuter = document.querySelector('.outer');
//在outer的節點上綁定事件監聽,點擊後跳出'outer'的警告視窗
elOuter.addEventListener('click',function () {
  alert('outer');
},false)

var elInner = document.querySelector('.inner');
//在inner的節點上綁定事件監聽,點擊後跳出'inner'的警告視窗
elInner.addEventListener('click',function (e) {
//阻止事件向外冒泡,只執行'inner'這個區塊的程式碼
  e.stopPropagation();
  alert('inner');
},false)

Day28:e.stopPropagation()停止事件冒泡
https://popeye-ux.github.io/2021/09/28/21-day28-stopPropagation/
作者
POPEYE
發布於
2021年9月28日
許可協議