Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
学ぶ イベント伝播とデリゲーションの解説 | JavaScriptにおけるイベント処理とユーザーインタラクション
JavaScriptロジックとインタラクション

bookイベント伝播とデリゲーションの解説

メニューを表示するにはスワイプしてください

イベント伝播

イベント伝播は、イベントが発生した後にDOM内をどのように移動するかを説明し、キャプチャリングターゲットバブリングの3つの明確なフェーズがあります。

キャプチャリングフェーズ(Capture)

イベントはDOMツリーのルート(window)から開始し、ターゲット要素に向かって下方向に移動します。このフェーズでは、イベントリスナーがイベントを下方向に伝播する際にキャッチします。

ターゲットフェーズ

イベントがターゲット要素(イベントを発生させた要素)に到達します。この段階で、ターゲット要素自体に設定されたイベントリスナーが実行されます。

バブリングフェーズ(Bubble)

ターゲット要素に到達した後、イベントはDOMツリーをルート(window)に向かって上方向に移動し、親要素をバブリングします。これは最も一般的に使用されるフェーズであり、親要素が子要素によって発生したイベントに反応できるようになります。

index.html

index.html

index.css

index.css

index.js

index.js

copy

button がクリックされると、イベントは DOM を伝播します。最初にイベントは button で発生します(ターゲットフェーズ)、その後、内側の div にバブルアップし、最終的に外側の div へと伝播します(バブリングフェーズ)。

イベントデリゲーション

イベントデリゲーション は、イベント伝播を利用して、親要素に単一のイベントリスナーを設定し、子要素から発生するイベントを処理する手法です。各子要素に個別のリスナーを付与する代わりに、親要素が子要素からバブルアップしてくるイベントを監視します。 この手法には主に2つの利点があります:

  1. パフォーマンス:イベントリスナーの数を減らすことでパフォーマンスが向上します。特に要素が動的に生成される場合(例:新しい項目が追加されてリストが拡張される場合)に有効です;
  2. 保守性:大規模な DOM 構造や動的コンテンツを扱う際に、イベントデリゲーションによってコードが簡素化されます。
index.html

index.html

index.css

index.css

index.js

index.js

copy

それぞれの button 要素にクリックリスナーを個別に追加する代わりに、1つのリスナーを div 親要素に追加します。イベントは button 要素から div へバブリングし、そこで処理されます。

悪いアプローチ

良いアプローチ

実践例:動的リストの操作

イベントデリゲーションは、時間の経過とともに増減するリストやテーブル(例:ToDoリストへのタスク追加やショッピングカートへの商品追加)の操作管理に最適。アイテムが追加・削除されても、親コンテナ(ultableなど)がすべての操作を管理するため、各子要素ごとにリスナーを付けたり外したりする必要がなくなる。

index.html

index.html

index.css

index.css

index.js

index.js

copy

1. イベント伝播とは何ですか?

2. イベントがターゲット要素に到達した後、DOMツリーを上に移動するフェーズはどれですか?

3. イベントデリゲーションが特に動的コンテンツで有用な理由は何ですか?

question mark

イベント伝播とは何ですか?

正しい答えを選んでください

question mark

イベントがターゲット要素に到達した後、DOMツリーを上に移動するフェーズはどれですか?

正しい答えを選んでください

question mark

イベントデリゲーションが特に動的コンテンツで有用な理由は何ですか?

正しい答えを選んでください

すべて明確でしたか?

どのように改善できますか?

フィードバックありがとうございます!

セクション 3.  4

AIに質問する

expand

AIに質問する

ChatGPT

何でも質問するか、提案された質問の1つを試してチャットを始めてください

セクション 3.  4
some-alt