JavaScriptはイベントリスナーをイベント委任にバッチで追加します。詳細なプロセス

JavaScriptはイベントリスナーをイベント委任にバッチで追加します。詳細なプロセス

1. イベント委任とは何ですか?

イベント委譲: イベントバブリングの特性を利用して、子要素に登録すべき処理イベントを親要素に登録します。これにより、子要素がクリックされたときに、それ自身に対応するイベントがないことが判明した場合、親要素が検索され、応答されます。これを行う利点は次のとおりです。

  • DOM 操作を減らし、パフォーマンスを向上させます。
  • サブ要素はいつでも追加でき、追加されたサブ要素には対応する処理イベントが自動的に設定されます。

2. イベント委任の原則

イベント委任は、イベント バブリング原則を使用して実装されます。イベント バブリングとは何ですか?つまり、イベントは最も深いノードから始まり、段階的に上方に伝播します。
例えば、ページ上にdiv>ul>li>aというノードツリーがあり、例えば一番内側のaにクリックイベントを追加すると、このイベントは外側に向かってレイヤーごとに実行され、実行順序はa>li>ul>divです。このような仕組みがあるので、一番外側のdivにクリックイベントを追加すると、内側のul、li、aがクリックイベントを作成すると、一番外側のdivにバブリングされ、すべてトリガーされます。これがイベント委任であり、親に代わってイベントを実行することを委託します。

3. イベント委任の実施

ケースを通じてイベント委任を実装します。
ケース: イベント リスナーをバッチで追加します。 JavaScript を使用して、どの li 要素をクリックすると、どの li 要素の背景が赤くなるかを実現します。

ここに画像の説明を挿入

構造レイヤー + スタイル レイヤー コード:

<スタイル>
    * {
        マージン: 0;
        パディング: 0;
    }
    ul {
        フロート: 左;
        幅: 800ピクセル;
        上マージン: 50px;
    }
    ul li {
        リストスタイル: なし;
        フロート: 左;
        幅: 200ピクセル;
        高さ: 200px;
        境界線: 1px実線 #000;
        右マージン: 20px;
    }
    ul li:最初の子 {
        左マージン: 20px;
    }
</スタイル>
<本文>
	<ul id="リスト">
    	<li>1</li>
    	<li>2</li>
    	<li>3</li>
	</ul>
</本文>

3.1 方法1: ループしてイベントを追加する

イベント委任を使用せず、for ループを使用してクリック イベントを追加すると、メモリ消費量が多くなります。

var oList = document.getElementById('list');
var lis = oList.getElementsByTagName('li');
(var i = 0; i < lis.length; i++) の場合 {
    lis[i].onclick = 関数(){
        this.style.backgroundColor = '赤';
    }
}

3.2 方法2: イベント委任の使用

イベント委任を使用します。

var oList = document.getElementById('list');
oList.onclick = 関数 (e) {
	e.target.style.backgroundColor = '赤';
}

この場合、e.target はユーザーが実際にクリックした要素を表します。

これで、JavaScript を使用してイベント リスナーをイベント委任に一括で追加する詳細なプロセスに関するこの記事は終了です。JavaScript イベント委任に関するより関連性の高いコンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • js におけるイベントバブリングとイベントキャプチャの簡単な分析
  • JavaScript におけるイベント バブリング メカニズムの詳細な分析
  • JS でのイベント バブリングとイベント キャプチャの概要
  • JSバブリングイベントとイベントキャプチャ例の詳細な説明
  • jsイベント委譲の詳細な説明
  • JavaScript イベントバブリング、イベントキャプチャ、イベント委任の詳細な説明

<<:  Docker ビルド PHP 環境チュートリアル詳細説明

>>:  HTML テーブル マークアップ チュートリアル (16): タイトルの水平方向の配置属性 ALIGN

推薦する

MySQLの文字列インターセプト関連関数の概要

この記事では、MySQL の文字列インターセプト関連の機能を紹介します。具体的な内容は以下のとおりで...

コードブロックのハイライトをコピーして表示できる js プラグイン highlight.js + clipboard.js 統合

主に2つの側面から: 1. ハイライト/改行2. コードのコピーボタンこれら両方には既製のプラグイン...

JavaScript クロージャの説明

目次1. クロージャとは何ですか? 2. クロージャの役割2.1) メモリ2.2) プライベート変数...

テーブルパーティションとパーティション分割とは何ですか?MySqlデータベースパーティションとテーブルパーティション分割方法

1. テーブルとパーティションを分割する必要があるのはなぜですか?日常の開発では、大きなテーブルに遭...

MySQLクエリ文の実行プロセスの詳細な説明

目次1. クライアントとサーバー間の通信方法2. クエリキャッシュ3. クエリ最適化処理4. クエリ...

HTML メタの使用例

使用例コードをコピーコードは次のとおりです。 <!DOCTYPE html> <!...

MySQLデータベースの基礎知識と操作のまとめ

この記事では、例を使用して、MySQL データベースの基本的な知識と操作について説明します。ご参考ま...

XHTML CSSを使用して正式なブログを書く

ブログの正式名称は「Web log」で、中国語で「ネットワークログ」を意味します。後にブログに短縮さ...

Youdaの新しいプチビューの実装

目次序文導入ライブ使いやすいルートスコープマウント要素の指定ライフサイクルコンポーネントグローバル状...

ソースコードの観点からキープアライブコンポーネントのキャッシュ原理に答える

今日は、早速本題に入り、面接中に尋ねられた質問、つまりキープアライブ コンポーネントのキャッシュ原理...

Vue の新しいパートナー TypeScript クイックスタート実践記録

目次1. 公式の足場を使って構築する2. プロジェクトディレクトリ分析3. TypeScript の...

Vue+SpringBoot のフロントエンドとバックエンドの分離におけるクロスドメインの問題

フロントエンドとバックエンドを分離した開発では、フロントエンドがバックエンドの API を呼び出して...

Vueはシンプルな画像切り替え効果を実装します

この記事では、Vueの具体的なコード例を参考までに紹介します。具体的な内容は以下のとおりです。 コー...

Div はフラッシュを覆います。フラッシュ透過方式により、フラッシュ上に DIV レイヤーを配置できます。

2つのタイプがあります: (異なるブラウザ) 1. IEブラウザで利用可能コードをコピーコードは次の...

MySQL 8.0.20 のインストールと設定方法のグラフィックチュートリアル

MySQLのダウンロードとインストール(バージョン8.0.20)のチュートリアルは参考までに、具体的...