キャプチャーフェーズ バブリングフェーズ
<div>
<p style="margin: 1em">色は匂へど <span>散りぬるを</span></p>
</div>const Div = document.querySelector("div");
const Para = document.querySelector("p");
const Span = document.querySelector("span");
Div.addEventListener(
"click",
function () {
console.log("Divが押されました。");
},
true // true → キャプチャーフェーズ
// デフォルト(false) → バブリングフェーズ
);
Para.addEventListener("click", (e) => {
e.stopPropagation(); // バブリングを止める
console.log("Paraが押されました。");
});
Span.addEventListener("click", (e) => {
e.stopPropagation(); // バブリングを止める
console.log("Spanが押されました。");
});イベントバブリング: イベントが親へと伝わっていく流れのこと
preventDefault: a(リンク先に移動)、submit等のデフォルトアクションを中止する
stopPropagation: イベントフローを中断する
イベントキャプチャリング: イベントバブリングの前に、親要素から子要素に向けてイベントが伝わる
addEventListenerの3つめの引数: そのイベントリスナ(関数)をイベントキャプチャリングで処理するならtrue、イベントバブリングで処理するならfalse
addEventListenerに第三引数を設定することができる
const option = {
// once: true, // リスナーの呼び出しを1回のみにする
capture: true, //キャプチャーフェーズで取得する
};
btn.addEventListener(“click”, fnc, option);
[ イベントフロー ]
イベントが発生
↓
キャプチャリングフェーズ(親から子へイベントを見ていく)
↓
ターゲットフェーズ(発生源の要素の処理)
↓
バブリングフェーズ(発生源から親へイベントを見ていく)