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コンテナのエクスポートとインポートの例

推薦する

Nginx における 2 つの現在の制限方法についての簡単な説明

負荷は通常、システム設計時に予測されます。システムがパブリック ネットワークに公開されている場合、悪...

純粋なJSを使用してセカンダリメニュー効果を実現します

この記事の例では、セカンダリメニュー効果を実現するためのJSの具体的なコードを参考までに共有していま...

Navicat による MySQL パーティショニングの実践

MySQLのパーティショニングは、非常に大きなテーブルを管理するのに役立ちます。MySQLのパーティ...

製品を選択した後、右下隅に√記号を表示するための純粋なCSS

おすすめの記事: CSS 疑似クラスの右下隅をクリックすると、選択を示すチェックマークが表示されます...

Linux システムでの vim プラグインのインストールの概要

目次vimプラグインマネージャーをインストールするプラグインデモを追加プラグインを削除するには: v...

MySQLdump コマンドを使用した MySQL データの移行

このソリューションの利点はシンプルさと使いやすさですが、欠点はダウンタイムが長くなることです。 した...

CSSはスクロールを許可しながらスクロールバーを非表示にするためにオーバーフローを設定します

CSS は、スクロールを許可しながらスクロール バーを非表示にするために Overflow を設定し...

MySQL 外部キー制約 (FOREIGN KEY) ケースの説明

MySQL 外部キー制約 (FOREIGN KEY) はテーブルの特別なフィールドであり、主キー制約...

MySQLで自動作成時間と変更時間を設定する方法の例

この記事では、MySQL の自動作成時刻と変更時刻を設定する方法について説明します。ご参考までに、詳...

CSS3のvar()を使用して実行時にscss変数の値を変更する詳細な説明

var() の紹介と使用法詳細 (MDN) IEは無効ですが、他の主流のブラウザは有効ですvar()...

TypeScript 名前空間のマージの説明

目次同じ名前の名前空間をマージする名前空間とその他の種類のマージ同じ名前の名前空間とクラスをマージす...

Nginx 構成の実装 HTTPS セキュリティ認証

1. HttpとHttpsの違いHTTP: インターネットで最も広く使用されているネットワーク プロ...

Centos7 で keepalived ログを別のパスに設定する方法の詳細な説明

Keepalived のインストール: cd <keepalived_sourcecode_p...

CSS ピックアップ矢印、カタログ、アイコン実装コード

1. CSS その他のアイコンアイコンを作成するには 3 つの方法があります。写真css (小さな矢...

Docker で nginx のログレベルを調整する方法

目次はじめにNginx Dockerファイル新しい会議もっと参考文献はじめに最近、アプリケーションの...