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

JavaScriptのイベントデリゲーションの仕組みと実践例

JavaScriptのイベントデリゲーションの仕組みと実践例
JavaScriptのイベントデリゲーションの仕組みと実践例

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

生徒

「先生、リストのボタンがいっぱいあるんですが、一つずつイベントを設定するのは大変です。何か簡単な方法はありますか?」

先生

「それならイベントデリゲーションを使うと便利です。これは親要素にイベントを設定して、子要素の操作をまとめて管理する方法です。」

生徒

「親に設定して、どうやって子を判別するんですか?」

先生

「イベントオブジェクトのtargetプロパティを使うと、どの子要素が操作されたかを簡単に特定できます。では、実際に見てみましょう!」

1. イベントデリゲーションとは?

1. イベントデリゲーションとは?
1. イベントデリゲーションとは?

イベントデリゲーションとは、親要素にイベントリスナーを設定し、子要素の操作をまとめて処理するテクニックです。通常、ボタンやリンクがたくさんある場合、個別にイベントを設定するとコードが増えますが、デリゲーションを使うと簡単に管理できます。

この方法は、DOMの階層構造とイベントの伝播(バブリング)を利用しています。子要素で発生したイベントが親要素に伝わる性質を活用するのです。

2. 基本的な仕組み

2. 基本的な仕組み
2. 基本的な仕組み

イベントデリゲーションでは、親要素にaddEventListenerでクリックや変更などのイベントを設定します。そして、イベントオブジェクトのtargetを使って、実際に操作された子要素を判別します。


const list = document.getElementById("itemList");

list.addEventListener("click", function(event) {
  const clicked = event.target;
  if(clicked.tagName === "BUTTON") {
    console.log(clicked.textContent + "がクリックされました");
  }
});

この例では、リスト内のすべてのボタンを一つのイベントリスナーで管理しています。tagNameを使ってクリックされた要素がボタンかどうかを判別しています。

3. なぜイベントデリゲーションが便利なのか

3. なぜイベントデリゲーションが便利なのか
3. なぜイベントデリゲーションが便利なのか

ボタンが10個でも100個でも、親要素に一つイベントを設定するだけで済みます。また、動的に追加される要素も自動的に対象になります。これにより、コードが簡潔になり、管理が容易になります。

さらに、イベントリスナーの数を減らすことで、ブラウザの処理効率も向上します。大規模なリストや複雑な画面で特に効果的です。

4. 実践例:動的に追加されるリストでも対応

4. 実践例:動的に追加されるリストでも対応
4. 実践例:動的に追加されるリストでも対応

例えば、新しいアイテムをリストに追加しても、イベントデリゲーションなら自動的にクリック処理が適用されます。


const addItemButton = document.getElementById("addItem");

addItemButton.addEventListener("click", function() {
  const newItem = document.createElement("li");
  const button = document.createElement("button");
  button.textContent = "新しいボタン";
  newItem.appendChild(button);
  list.appendChild(newItem);
});

このようにリストに新しいボタンを追加しても、親要素に設定されたイベントリスナーが自動で処理します。

5. 注意点とコツ

5. 注意点とコツ
5. 注意点とコツ

イベントデリゲーションを使うときは、event.targetで正確に子要素を判別することが大切です。例えば、ボタン内のアイコンなどもクリックされた場合に意図しない処理が発生することがあります。その場合はclosest()などを使って、特定の親要素を取得すると安全です。


list.addEventListener("click", function(event) {
  const button = event.target.closest("button");
  if(button) {
    console.log(button.textContent + "がクリックされました");
  }
});

6. 練習のすすめ

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

まずは簡単なリストを作り、ボタンを数個設置してイベントデリゲーションを試してみましょう。その後、新しいアイテムを追加しても動作することを確認します。こうすることで、イベントデリゲーションの仕組みと便利さを体感できます。

カテゴリの一覧へ
新着記事
New1
TypeScript
TypeScriptでパスエイリアスを設定する方法!baseUrlとpathsでコードをスッキリ整理
New2
JavaScript
JavaScriptのfor文の書き方を初心者向けにやさしく解説
New3
JavaScript
JavaScriptの関数でよくあるエラーとその解決法まとめ
New4
JavaScript
JavaScriptのイベント処理でよくあるエラーとその対処法
人気記事
No.1
Java&Spring記事人気No1
JavaScript
JavaScriptのインストール方法まとめ!Windows・Mac・Linux別にステップ解説
No.2
Java&Spring記事人気No2
JavaScript
JavaScriptのマウスイベントの使い方(click, mouseoverなど)
No.3
Java&Spring記事人気No3
JavaScript
JavaScriptのtoStringとString関数の違いを初心者向けに解説
No.4
Java&Spring記事人気No4
JavaScript
JavaScriptの純粋関数(pure function)と副作用の違いを理解しよう
No.5
Java&Spring記事人気No5
JavaScript
JavaScriptプログラムの実行方法まとめ!ブラウザ・Node.js・コンソールの使い方
No.6
Java&Spring記事人気No6
JavaScript
JavaScriptで文字列をforループで1文字ずつ処理する方法!初心者向け解説
No.7
Java&Spring記事人気No7
JavaScript
JavaScriptのDOMContentLoadedとloadイベントの違いを理解しよう
No.8
Java&Spring記事人気No8
TypeScript
TypeScriptの始め方:開発環境の構築手順【初心者向け】