カテゴリ: JavaScript 更新日: 2026/01/30

JavaScriptのイベントの伝播(バブリング・キャプチャリング)とは?

JavaScriptのイベントの伝播(バブリング・キャプチャリング)とは?
JavaScriptのイベントの伝播(バブリング・キャプチャリング)とは?

先生と生徒の会話形式で理解しよう

生徒

「先生、ボタンをクリックしたら親の要素まで勝手に処理が伝わることがあるんですが、これはどういうことですか?」

先生

「それはイベントの伝播、つまりバブリングやキャプチャリングの仕組みです。イベントは単に発生するだけでなく、HTMLの階層構造に沿って親要素や子要素に伝わる性質があります。」

生徒

「親や子に伝わるって、どういう順番で伝わるんですか?」

先生

「順番は二通りあります。キャプチャリングは親から子へ、バブリングは子から親へ伝わる流れです。具体的な動きをコード例で見てみましょう。」

1. イベントの伝播とは?

1. イベントの伝播とは?
1. イベントの伝播とは?

イベントの伝播とは、ユーザーの操作によって発生したイベントが、HTMLの階層構造に沿って関連する要素に広がることです。例えば、ボタンをクリックしたとき、そのボタンだけでなく、親の

やまで処理が伝わることがあります。

この伝播の仕組みを理解しておくと、イベントを適切に制御でき、意図しない動作を防ぐことができます。

2. バブリング(Bubbling)とは?

2. バブリング(Bubbling)とは?
2. バブリング(Bubbling)とは?

バブリングとは、子要素で発生したイベントが、親要素へ順に伝わっていく仕組みです。水の泡が下から上に上がるイメージで考えるとわかりやすいです。


const parent = document.getElementById("parent");
const child = document.getElementById("child");

parent.addEventListener("click", function() {
  console.log("親要素がクリックされました");
});

child.addEventListener("click", function() {
  console.log("子要素がクリックされました");
});

子要素をクリックすると、まず子の処理が実行され、その後に親の処理も実行されます。これがバブリングです。

3. キャプチャリング(Capturing)とは?

3. キャプチャリング(Capturing)とは?
3. キャプチャリング(Capturing)とは?

キャプチャリングはバブリングの逆で、親要素から子要素へ順にイベントが伝わる仕組みです。波が岸に向かって押し寄せるようなイメージです。


parent.addEventListener("click", function() {
  console.log("親要素のキャプチャリング処理");
}, true); // 第三引数trueでキャプチャリングを有効

第三引数にtrueを指定するとキャプチャリングとして扱われ、親から子へ順に処理が行われます。

4. 伝播を止める方法

4. 伝播を止める方法
4. 伝播を止める方法

場合によっては、イベントが親要素に伝わらないように制御したいことがあります。その場合はevent.stopPropagation()を使います。


child.addEventListener("click", function(event) {
  console.log("子要素の処理");
  event.stopPropagation(); // 親要素への伝播を止める
});

これにより、子要素の処理だけが実行され、親のイベントハンドラーは呼ばれません。

5. バブリングとキャプチャリングの使い分け

5. バブリングとキャプチャリングの使い分け
5. バブリングとキャプチャリングの使い分け

通常はバブリングがデフォルトで使われます。親要素にまとめてイベント処理をしたい場合はバブリング、親から順番に処理したい場合はキャプチャリングを使います。どちらを使うかは、目的に応じて選ぶと良いです。

6. 練習のすすめ

6. 練習のすすめ
6. 練習のすすめ

親要素と子要素を作り、クリックイベントにバブリングとキャプチャリングを設定してみましょう。stopPropagationも使って動作を確認すると、イベント伝播の仕組みが自然に理解できます。実際に手を動かすことで、イベントの順番や伝播の流れが直感的にわかるようになります。

カテゴリの一覧へ
新着記事
New1
JavaScript
JavaScriptの条件式で論理演算子(&&, ||, !)を活用する方法!初心者でもわかる使い方ガイド
New2
TypeScript
TypeScriptでエラー処理を共通関数化して効率的に開発しよう!初心者向け例外処理ガイド
New3
JavaScript
JavaScriptの条件式における比較演算子の使い方まとめ!初心者でもわかる基本ルールと活用法
New4
JavaScript
JavaScriptのswitch文の基本構文と使いどころを学ぼう!初心者でもわかる条件分岐の書き方
人気記事
No.1
Java&Spring記事人気No1
JavaScript
JavaScriptのインストール方法まとめ!Windows・Mac・Linux別にステップ解説
No.2
Java&Spring記事人気No2
JavaScript
JavaScriptのtoStringとString関数の違いを初心者向けに解説
No.3
Java&Spring記事人気No3
TypeScript
TypeScriptでコメントを書く正しい書き方と使い分け【初心者向けにやさしく解説】
No.4
Java&Spring記事人気No4
JavaScript
JavaScriptで統一感のあるコードを書くための基本ルール完全ガイド初心者向けコーディング規約入門
No.5
Java&Spring記事人気No5
JavaScript
JavaScriptプログラムの実行方法まとめ!ブラウザ・Node.js・コンソールの使い方
No.6
Java&Spring記事人気No6
JavaScript
JavaScriptのonclick・onchangeなどの基本イベントを理解しよう
No.7
Java&Spring記事人気No7
TypeScript
TypeScriptのnever型を使ったエラーハンドリング!例外処理を極める安全なコードの書き方
No.8
Java&Spring記事人気No8
JavaScript
JavaScriptの数値フォーマット(小数点以下の桁数調整)を学ぼう