JavaScript イベント委任 (プロキシ) の使用例の詳細

JavaScript イベント委任 (プロキシ) の使用例の詳細

導入

例示する

この記事では、JavaScript でのイベントの委任 (delegate) の使用方法を例を使って紹介します。

イベント委任の概要

イベント委任 (イベント プロキシとも呼ばれる) は、JavaScript でイベントをバインドするための一般的な手法です。これは、本来は子要素にバインドする必要がある応答イベントを親要素または外部要素に委任し、外部要素がイベント監視の責任を引き受けられるようにすることです。

イベント委任の原則は、DOM 要素のイベント バブリングです。

イベント委任の利点

1. メモリを節約し、イベントバインディングを減らす

元々、イベントはすべての子要素にバインドする必要がありましたが、イベント委任を使用した後は、必要なイベント バインディングは 1 つだけになります。

2. イベントは動的にバインドでき、新しく追加されたサブオブジェクトイベントはバインドされたイベントによって処理できます。

新しく追加された子オブジェクトによって生成されたイベントは、最終的に親要素にバブルアップされ、処理できるようになるため、

例: イベントの委任

要件: リスト要素をクリックするとコンテンツがポップアップ表示されるリスト。

記述方法1: イベント委譲

イベントを外側の要素にバインドするだけです。

 <!doctypehtml>
<html lang="ja">
 
<ヘッド>
    <メタ文字セット="UTF-8">
    <title>これはタイトルです</title>
</head>
 
<本文>
 
<ul id="id-ul">
    <li>私は最初のliです</li>
    <li>私は2番目のliです</li>
    <li>私は3番目のliです</li>
</ul>
 
<スクリプト>
    ul = document.getElementById('id-ul'); とします。
    ul.addEventListener("クリック", 関数(ev) {
        アラート(ev.target.innerText);
    })
</スクリプト>
 
</本文>
</html>

結果

記述方法2: 各子要素はイベントにバインドされます

各子要素にはイベントがバインドされています。

 <!doctypehtml>
<html lang="ja">
 
<ヘッド>
    <メタ文字セット="UTF-8">
    <title>これはタイトルです</title>
</head>
 
<本文>
 
<ul id="id-ul">
    <li>私は最初のliです</li>
    <li>私は2番目のliです</li>
    <li>私は3番目のliです</li>
</ul>
 
<スクリプト>
    li = document.querySelectorAll('#id-ul li') とします。
    for (let liElement of li) {
        liElement.addEventListener("クリック", 関数(ev) {
            アラート(ev.target.innerText);
        });
    }
</スクリプト>
 
</本文>
</html>

結果

例: 新しい要素を追加する

要件: 「生成ボタン」をクリックするたびに、サブリスト要素が生成されます。その後、リスト要素をクリックするたびに、その内容がポップアップ表示されます。

記述方法1: イベント委譲

<!doctypehtml>
<html lang="ja">
 
<ヘッド>
    <メタ文字セット="UTF-8">
    <title>これはタイトルです</title>
</head>
 
<本文>
 
<ul id="id-ul">
    <li>1</li>
    <li>2</li>
</ul>
<button id="btn">クリック</button>
<スクリプト>
    num = 3 とします。
    eUl = document.querySelector("#id-ul");
    eButton を document.querySelector("#btn") とします。
 
    eButton.addEventListener("クリック", 関数() {
        newLi = document.createElement("li");
        eUl.appendChild(newLi);
        新しいLi.innerText = num++;
    })
    eUl.addEventListener("クリック",関数(イベント) {
        アラート(event.target.innerText);
    })
</スクリプト>
 
</本文>
</html>

結果

ご覧のとおり、既存の要素と新しく作成された要素の両方のイベントが処理されます。

記述方法2: 各子要素はイベントにバインドされます

<!doctypehtml>
<html lang="ja">
 
<ヘッド>
    <メタ文字セット="UTF-8">
    <title>これはタイトルです</title>
</head>
 
<本文>
 
<ul id="id-ul">
    <li>1</li>
    <li>2</li>
</ul>
<button id="btn">クリック</button>
<スクリプト>
    num = 3 とします。
    eUl = document.querySelector("#id-ul");
    eButton を document.querySelector("#btn") とします。
    eLi = document.querySelectorAll("#id-ul li");
 
    eButton.addEventListener("クリック", 関数() {
        newLi = document.createElement("li");
        eUl.appendChild(newLi);
        新しいLi.innerText = num++;
    })
 
    (eLiのeLi要素とする) {
        eLiElement.addEventListener("クリック",関数(イベント) {
            アラート(event.target.innerText);
        })
    }
 
</スクリプト>
 
</本文>
</html>

結果

元の要素のクリック イベントは処理されますが、新しく追加された要素は処理されないことがわかります。

これで、JavaScript イベント委譲の詳細な使用例に関するこの記事は終了です。JavaScript イベント委譲に関するより関連性の高いコンテンツについては、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • JavaScript イベント委任の原則
  • jsイベント委譲の詳細な説明
  • JavaScript イベント委任の原則と使用例の分析
  • js イベント委任とイベントプロキシケース共有
  • jsイベントプロキシ(デリゲート)の詳しい説明
  • JS イベントバインディング、イベント監視、イベント委任の詳細

<<:  CSS3で作成した画像スクロール効果

>>:  Dockerコンテナのエクスポートとインポートの例

推薦する

503 サービス利用不可エラーの解決方法の説明

1. Webページを開くと503サービス利用不可が表示されますが、更新すると正常にアクセスできます。...

要素のフォーム要素の使用の概要

フォーム要素はたくさんあります。簡単にまとめると、次のようになります。私のやり方では、主にテキスト ...

DIV の一般的なタスク (パート 1) — 一般的なタスク (スクロール バーの表示、div の非表示、イベント バブリングの無効化など)

最も一般的に使用されるレイアウト要素として、DIV は Web 開発において重要な役割を果たします。...

Nodeイベントループの包括的な理解

目次ノードイベントループイベントループ図メインスレッドイベントループタイマーキューの仕組み投票キュー...

JS を使用してデータ型を決定する 4 つの方法

目次序文1. 型2. インスタンス3. コンストラクター詳細: 4. 文字列要約する序文Javasc...

MySQL のレイテンシ問題とデータフラッシュ戦略プロセスの分析

目次1. MySQLレプリケーションプロセス2. MySQLの遅延問題の分析3. プロモーション期間...

Dockerは異常なコンテナ操作を排除する

この初心者は、Docker を学び始めたばかりの頃にこのような問題に遭遇しました。記録しておきます。...

イラスト風ウェブサイトホームページデザイン ウェブサイトデザインの新トレンド

視覚効果が非常に美しく、訪問者に強い印象を残すことがわかります。さらに、重要なポイントが強調され、訴...

Windows 10 での MySQL 8.0.12 解凍バージョンのインストール グラフィック チュートリアル

この記事は、MySQL 8.0.12解凍版のインストールグラフィックチュートリアルを記録しています。...

単一の MySQL テーブルで数千万のデータを処理するアイデアを共有する

目次プロジェクトの背景改善案データ特性を観察するマルチプロセスアイデアの要約データ処理スキルプロジェ...

MySQL ジョイントテーブル更新デー​​タの詳細な例

1.MySQL UPDATE JOIN構文MySQL では、UPDATE ステートメントでJOIN句...

JavaScript でオブザーバー パターンを実装する方法

目次概要オブザーバーパターンの応用シナリオオブザーバーパターンの実装要約する概要オブザーバー パター...

10分でCSS3グリッドレイアウトを理解する

基本的な紹介前回の記事では、CSS3 のフレックスボックスを紹介しました。今日は、CSS3 のもう ...

シンプルな計算機を実装する JavaScript コード

この記事では、参考までに、簡単な計算機を実装するためのJavaScriptの具体的なコードを紹介しま...

Linux inotifyリアルタイムバックアップの実装方法の詳細説明

リアルタイム レプリケーションは、企業データをバックアップする最も重要な方法です。主に、ユーザーが送...