0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ひとりアドベントカレンダーチャレンジAdvent Calendar 2024

Day 11

event.stopImmediatePropagation() について

Last updated at Posted at 2024-12-16

はじめに

現代の JavaScript チュートリアルを読んでいる時にevent.stopImmediatePropagation()という見慣れないイベントを見かけたので、今回はそれについて調べてみました。

event.stopImmediatePropagation()とは

stopImmediatePropagation() は Event インターフェイスのメソッドで、呼び出されている同じイベントの他のリスナーを抑止します。

同じ要素で、同じ種類のイベントに複数のリスナーが装着されている場合、追加された順番に呼び出されます。もし、そのような呼び出しの最中に stopImmediatePropagation() が呼び出された場合、残りのリスナーは呼び出されなくなります。

stopPropagation()とかなり似たように思えますが、stopPropagation()とは決定的な差があるようです。

「stopPropagationはバブリング(親要素のイベントハンドラ実行)を止める」に対し、「stopImmediatePropagationはバブリングを止め、かつ現在の要素で登録されている他のハンドラの実行もさせない」ということです。

参考に、簡単な例をCodePenで作成したのでみていきましょう

See the Pen stopImmediateProp by hikagami (@hikagami0210) on CodePen.

長いのでコードは折りたたみます
// 背景
const base = document.getElementById("base");
base.addEventListener("click", () => alert("baseのクリックイベント"));

// nomalのボタン
const btn = document.getElementById("noStop");
btn.addEventListener("click", () => alert("normalのクリックイベント"));

// stopPropagationのボタン
const stopPropBtn = document.getElementById("stopProp");
stopPropBtn.addEventListener("click", (event) => {
  event.stopPropagation();
  alert(`stopPropagationのクリックイベント`);
});
stopPropBtn.addEventListener("click", () =>
  alert(`stopPropagationのクリックイベント 2`)
);

// stopImmediatePropagationのボタン
const stopImmediatePropBtn = document.getElementById("stopImmediateProp");
stopImmediatePropBtn.addEventListener("click", (event) => {
  event.stopImmediatePropagation();
  alert(`stopImmediatePropagationのクリックイベント`);
});
stopImmediatePropBtn.addEventListener("click", (event) => {
  event.stopImmediatePropagation();
  alert(`stopImmediatePropagationのクリックイベント 2`);
});

nomalのボタンは背後のbaseまでクリックイベントが伝播しています。

stopPropagationのボタンは、baseへのバブリングを防ぐことはできています。
しかし、alert("stopPropagationのクリックイベント 2")が発火しているので、同じ要素のクリックイベントは防げていないことがわかります。

stopImmediatePropagationのボタンは、baseへのバブリングを防ぐとともに、alert("stopImmediatePropagationのクリックイベント 2")の発火までなくなっています。

MDNで確認したstopImmediatePropagation()の挙動とおなじですね。

おわりに

最後までお読みいただきありがとうございました。

覚えておけばいつか役に立つような気がします🤨

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?