JavaScript イベント委任の原則

JavaScript イベント委任の原則

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

イベント委任はイベント プロキシとも呼ばれます。イベントバブリングを使用して、子要素のすべてのイベントを親要素にバインドします。子要素がイベントのバブルを妨げる場合、委任は実現できません。

以下に簡単な例を示します。

たとえば、宅配業者が 100 人の学生に 100 個の荷物を配達する場合、荷物を 1 つずつ配達するには長い時間がかかります。同時に、各生徒がそれを受け取るために列に並ぶ必要があり、時間がかかります。どのようにすればよいでしょうか?この時点で、宅配業者は 100 個の速達小包をクラスの先生に託すことができ、先生はそれを事務室に置き、生徒は授業後に受け取ることができます。この方法により、宅配業者は時間を節約でき、学生にとっても荷物を受け取るのがより便利になります。このプロセスは委任イベントです。

2. イベント委任の原則

各子ノードに個別イベント リスナーを設定する代わりに、イベント リスナーを親ノードに設定し、バブリング原理を使用して各子ノードの設定に影響を与えます。

具体的なプログラムでどのように実装されているか見てみましょう。
たとえば、現在 5 つの li を含む順序なしリストがあります。各 li にクリック イベントを追加する必要があります。この時点での通常の操作は、ループを通じて各 li にクリック イベントを追加することです。

コードは次のようになります。

<本文>
    <ul>
        <li>111111</li>
        <li>222222</li>
        <li>333333</li>
        <li>444444</li>
        <li>555555</li>
    </ul>
    <スクリプト>
        var li = document.querySelectorAll('li');
        for(var i=0;i<li.length;i++){
            li[i].onclick = 関数(){
                this.style.color = '緑';
            }
        }
    </スクリプト>
</本文>

実行結果は次のとおりです。

この方法は確かにクリック操作を実現できますが、このプロセスではクリック イベントを毎回 li に追加する必要があるため、DOM アクセスが多すぎて、ページ全体のインタラクション準備時間が長くなります。

したがって、ここではイベント委任を使用できます。つまり、ul のクリック イベントを登録し、イベント オブジェクトのターゲットを使用して、現在クリックされている li を検索します。li がクリックされると、イベントが ul にバブルされ、ul に登録されたイベントがある場合は、イベント リスナーがトリガーされます。

実装コードは次のとおりです。

<スクリプト>
        var ul = document.querySelector('ul');
        ul.addEventListener('クリック',function(e){
            e.target.style.color = 'オレンジ';
        })
    </スクリプト>


実行結果は次のとおりです。

正常に表示されました。

3. イベント委託の役割

上記の操作により、イベント委任では DOM を 1 回だけ操作するため、プログラムのパフォーマンスが大幅に向上します。

JavaScript イベント委任の原則に関するこの記事はこれで終わりです。JavaScript イベント委任に関するより関連性の高いコンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。皆様が今後とも 123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • jsイベント委譲の詳細な説明
  • JS でのイベント委譲例の簡単な分析
  • ウェブメッセージボード機能を実現するjs
  • Web メッセージボード機能を実装する JavaScript
  • メッセージボードのネイティブJS実装
  • この記事では、イベント委任を使用してJavaScriptメッセージボード機能を実装する方法について説明します。

<<:  CSS3 で transform を使用した場合のフォントぼかしの解決方法の詳細な説明

>>:  VirtualBox の仮想ディスク vdi ファイルの容量を拡張する方法 (グラフィック チュートリアル)

推薦する

IDEA 構成の Tomcat 起動エラーの問題を解決する

異なるサーブレット パスを構成するときに、次の 2 つのエラーが発生しました。 java.lang....

Angularルーティングの基礎の詳細な説明

目次1. ルーティング関連オブジェクト2. ルーティングオブジェクトの場所3. ルーティング構成4....

MySQL 悲観的ロックと楽観的ロックの実装

目次序文実際の戦闘1. ロックなし2. 悲観的ロック3. 楽観的ロック要約する序文悲観的ロックと楽観...

MySqlを最適化するためにnot inを使用する方法

最近、プロジェクトで選択クエリを使用する際に、未使用の主キー ID を除外するために not in ...

this.parentNode.parentNode (親ノードの親ノード) はどういう意味ですか?

親ノードの親ノード、例えば、このような段落がありますHTML:コードをコピーコードは次のとおりです。...

docker.service 起動エラーの詳細なトラブルシューティング

エラーを報告するには次のコマンドを実行しますsystemctl dockerを再起動しますエラーメッ...

MYSQL(電話番号、IDカード)データ非感応化の実装

1. データ感度低下の説明日常の開発ニーズでは、データの感度低下が頻繁に発生します。たとえば、ID ...

Docker を使用した war パッケージ プロジェクトのデプロイの実装

Docker で war をデプロイするには、コンテナを使用する必要があります。ここでは tomca...

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

1. イベント委任とは何ですか?イベント委譲: イベントバブリングの特性を利用して、子要素に登録すべ...

HTML tbody の使用

構造化テーブル (IExplore のみ) 1) 行ごとにグループ化<thead> .....

mysql-8.0.16 winx64 最新インストール チュートリアル (画像とテキスト付き)

最近、データベースについて学び始めました。最初にやったことは、データベースとは何か、データベースとデ...

JS正規RegExpオブジェクトについての簡単な説明

目次1. RegExpオブジェクト2. 文法2.1 定義2.2 修飾子2.3 角括弧2.4 メタ文字...

MySQL 5.7.18のインストール方法とMySQLサービスの起動手順の詳細な説明

MySQL は非常に強力なリレーショナル データベースです。しかし、初心者の中には、インストールや設...

MySQL がエラーを報告: ファイルが見つかりません: './mysql/plugin.frm' 解決策

問題を見つける最近、仕事中に問題が見つかりました。問題は、MySQL ディスクがいっぱいだったことで...

mysql トリガーの作成と使用例

目次トリガーとは何かトリガーを作成するMySQL 作成構文のキーワードの説明: 1. MySQL ト...