【ITニュース解説】Event Bubbling and Capturing in JavaScript: The Complete Guide

2025年09月06日に「Dev.to」が公開したITニュース「Event Bubbling and Capturing in JavaScript: The Complete Guide」について初心者にもわかりやすいように丁寧に解説しています。

作成日: 更新日:

ITニュース概要

JavaScriptのイベントは、キャプチャリング、ターゲット、バブリングの3段階でDOMを伝播する。通常はバブリングが使われ、イベントは対象要素から親要素へと伝わる。`addEventListener`の第3引数に`true`を指定するとキャプチャリングを利用可能。`stopPropagation()`で伝播を止められる。イベント委譲、グローバルなイベント傍受、UIコンポーネント制御に役立つ重要な概念。

ITニュース解説

JavaScriptにおけるイベント処理の重要な概念であるイベントバブリングとイベントキャプチャについて解説する。Webページでボタンをクリックしたり、キーを押したりするなどの操作を行うと、イベントが発生する。このイベントは、DOM(Document Object Model)ツリーを特定の順序で伝播する。この伝播の仕組みを理解することは、効率的で予測可能なJavaScriptコードを書く上で不可欠となる。

イベント伝播には、キャプチャリングフェーズ、ターゲットフェーズ、バブリングフェーズの3つの段階がある。キャプチャリングフェーズでは、イベントはdocumentから始まり、html、bodyとDOMツリーを下降し、最終的にイベントが発生したターゲット要素に到達する。次に、ターゲットフェーズでイベントは、実際に操作された要素(ボタンやリンクなど)で処理される。最後に、バブリングフェーズでは、イベントはターゲット要素からその親要素へとDOMツリーを遡り、documentまで伝播する。

イベントバブリングは、ほとんどのJavaScriptイベントでデフォルトで有効になっている。これは、イベントが最初にターゲット要素で発生し、その後、親要素へと順に伝播していくことを意味する。例えば、div要素内のボタンをクリックすると、まずボタンのクリックイベントが処理され、次にdiv要素のクリックイベントが処理される。

イベントキャプチャは、バブリングとは逆の方向にイベントが伝播する。イベントはターゲット要素に到達する前に、DOMツリーを下降する途中で「キャプチャ」される。キャプチャリングフェーズでイベントをリッスンするには、addEventListenerメソッドの第3引数にtrueを指定する。これにより、イベントがターゲット要素に到達する前に、親要素でイベントを処理できる。

イベントの伝播を停止する必要がある場合もある。例えば、モーダルウィンドウの背景をクリックしたときに、モーダルウィンドウ自体が閉じないようにしたい場合などだ。JavaScriptでは、event.stopPropagation()メソッドとevent.stopImmediatePropagation()メソッドを使用して、イベントの伝播を制御できる。stopPropagation()メソッドは、DOMツリーの上下方向へのイベントの伝播を停止する。stopImmediatePropagation()メソッドは、stopPropagation()と同様にイベントの伝播を停止するだけでなく、同じ要素に登録されている他のイベントハンドラが実行されるのを防ぐ。

イベントバブリングとキャプチャの理解は、単なる理論的な知識ではなく、実践的な応用が可能だ。イベントデリゲーションはその一例だ。リスト内のすべてのli要素にクリックリスナーを追加する代わりに、ul要素に1つのリスナーを追加し、バブリングによってクリックされたli要素を特定できる。これにより、メモリの使用量を削減し、コードを簡素化できる。また、キャプチャリングを使用すると、イベントがターゲット要素に到達する前に傍受できるため、ログの記録、特定のアクションのブロック、フレームワークの構築などに役立つ。モーダルやドロップダウンなどのUIコンポーネントを構築する際にも、イベント伝播を制御することで、意図しないクリックによる予期せぬ動作を防ぐことができる。

イベントは、キャプチャ、ターゲット、バブルの3つのフェーズを経て伝播する。ブラウザはデフォルトでバブリングを使用する。キャプチャリングフェーズでイベントをリッスンするには、addEventListenerでtrueを使用する。イベントの伝播を抑制するには、stopPropagation()を使用する。イベントバブリングとキャプチャを理解し、適切に利用することで、より洗練されたUIを構築し、JavaScriptコードの効率と保守性を向上させることができる。

【ITニュース解説】Event Bubbling and Capturing in JavaScript: The Complete Guide | いっしー@Webエンジニア