検索
ホームページウェブフロントエンドjsチュートリアルJavaScript イベント委任をマスターする

最新の JavaScript 開発では、イベント処理は Web アプリケーションをインタラクティブかつ動的にする上で重要な役割を果たします。アプリケーションが成長するにつれて、イベント リスナーの管理も複雑になります。 イベント委任を入力します。これは、JavaScript の イベント伝播 システムを活用してイベント処理を最適化する強力なパターンです。

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

イベント委任は、単一のイベント リスナーを親要素にアタッチして、子要素のイベントを管理する手法です。すべての子に個別のリスナーを追加する代わりに、親はバブルアップされたイベントをキャプチャし、インタラクションのソースを特定します。

どのように機能しますか?

イベント委任は 2 つの主要な JavaScript メカニズムに依存しています:

  • イベント バブリング: イベントはターゲット要素から DOM ツリーのルートまで伝播します。

  • event.target: イベントの元の要素を識別します。

イベント委任の利点

Feature Explanation
Performance Reduces the number of event listeners, saving memory and improving efficiency.
Control Mechanism Automatically manages dynamically added elements without additional listeners.
Memory Handling Centralized event handling logic in fewer places in the code.
Common Use Cases Supported universally across modern browsers.

イベント伝播の詳細

JavaScript イベントは、DOM を通じて予測可能なライフサイクルに従います。これらの段階を理解することは、委任を習得するために非常に重要です:

1.キャプチャ フェーズ: イベントはルートから開始され、ターゲット要素まで移動します。
2.ターゲットフェーズ: イベントはターゲット要素でアクティブになります。
3.バブルフェーズ: イベントはルートまで伝播します。

イベント委任は主にバブル期に機能します。

コード例: 実際のイベント委任

シナリオ 1: リストのクリック イベントの管理
各リスト項目にリスナーを追加する代わりに:

const ul = document.querySelector("ul");
ul.addEventListener("click", (event) => {
    if (event.target.tagName === "LI") {
        console.log("Clicked item:", event.target.textContent);
    }
});

この単一のリスナーは、動的に追加されたものも含め、すべての li 要素を管理します。

const ul = document.querySelector("ul");
ul.innerHTML += "
  • New Item
  • "; // No new listener required.



    シナリオ 2: 複数のイベント タイプの委任
    イベント委任とイベントタイプチェックを組み合わせる:

    document.querySelector("#container").addEventListener("click", (event) => {
        if (event.target.matches(".button")) {
            console.log("Button clicked");
        } else if (event.target.matches(".link")) {
            console.log("Link clicked");
        }
    });
    



    シナリオ 3: 委任によるフォームの処理

    document.querySelector("#form").addEventListener("input", (event) => {
        if (event.target.matches("input[name='email']")) {
            console.log("Email updated:", event.target.value);
        } else if (event.target.matches("input[name='password']")) {
            console.log("Password updated.");
        }
    });
    

    このアプローチにより、動的に追加された新しい入力フィールドが自動的に処理されます。

    イベント委任のベストプラクティス

    1.特定のセレクターを使用する: 意図しない動作を防ぐため、部分一致を避けます。 event.target.matches() またはevent.target.closest() を使用します。
    2.過剰な委任を避ける: 親に多数の子が含まれている場合、親にあまりにも多くのイベントを委任すると非効率になる可能性があります。
    3.条件ロジックの最適化: 不必要なチェックを最小限に抑えるために条件を構造化します。
    4.スロットルまたはデバウンス イベント: スクロールやサイズ変更などのイベントの場合、スロットルを使用してパフォーマンスを向上させます:

    function throttle(callback, delay) {
        let lastTime = 0;
        return function (...args) {
            const now = Date.now();
            if (now - lastTime >= delay) {
                callback(...args);
                lastTime = now;
            }
        };
    }
    document.addEventListener("scroll", throttle(() => console.log("Scrolled!"), 200));
    

    イベント委任と直接イベント処理

    Aspect Direct Event Handling Event Delegation
    Setup Complexity Requires multiple listeners. Single listener handles multiple events.
    Dynamic Elements Requires manual re-attachment. Automatically supported.
    Performance in Large DOM Degrades as the number of listeners grows. Efficient with a centralized listener.
    Maintainability Scattered logic across multiple places. Centralized and clean.
    アスペクト 直接イベント処理 イベントの代表者 セットアップの複雑さ 複数のリスナーが必要です。 単一のリスナーが複数のイベントを処理します。 動的要素 手動で再接続する必要があります。 自動的にサポートされます。 大規模な DOM でのパフォーマンス リスナーの数が増えると劣化します。 一元化されたリスナーで効率的。 保守性 複数の場所に分散されたロジック。 一元化されており、クリーンです。 テーブル>

    フレームワークでのイベント委任

    反応
    React は DOM 操作を抽象化しますが、合成イベントでは委任に相当するものを見ることができます。 React は単一のルート リスナーを使用して、仮想 DOM 内のすべてのイベントを管理します。

    jQuery
    jQuery の .on() メソッドは委任を簡素化します:

    const ul = document.querySelector("ul");
    ul.addEventListener("click", (event) => {
        if (event.target.tagName === "LI") {
            console.log("Clicked item:", event.target.textContent);
        }
    });
    

    イベント委任によくある落とし穴

    1.偶然の一致
    セレクターが誤って無関係な要素と一致しないようにしてください。特定のセレクターまたはevent.target.closest()を使用します。

    2.イベントバブリングの防止
    場合によっては、特定の要素のバブリングを停止する必要がある場合があります:

    const ul = document.querySelector("ul");
    ul.innerHTML += "
  • New Item
  • "; // No new listener required.

    パフォーマンスに関する考慮事項

    1.ベンチマーク
    イベント委任により、大規模な DOM でのメモリ使用量が削減されますが、親が処理するイベントが多すぎると遅延が発生する可能性があります。

    2.開発ツール
    ブラウザ開発者ツールを使用して、接続されたリスナー (Chrome のコンソールの getEventListeners) を分析します。

    document.querySelector("#container").addEventListener("click", (event) => {
        if (event.target.matches(".button")) {
            console.log("Button clicked");
        } else if (event.target.matches(".link")) {
            console.log("Link clicked");
        }
    });
    

    ヒントとコツ

    • 非バブルイベントでの委任のシミュレーション: フォーカスやブラーなどの一部のイベントはバブルしません。代わりに focusin と focusout を使用してください。
    document.querySelector("#form").addEventListener("input", (event) => {
        if (event.target.matches("input[name='email']")) {
            console.log("Email updated:", event.target.value);
        } else if (event.target.matches("input[name='password']")) {
            console.log("Password updated.");
        }
    });
    
    • ルートレベルで委任を接続します: SPA または動的コンテンツの柔軟性を最大限に高めるには、リスナーをドキュメントにアタッチします。

    結論

    JavaScript イベント委任 は、対話型アプリケーション向けに効率的に拡張する重要な最適化戦略です。イベント処理を一元化し、メモリ使用量を削減し、保守性を向上させることで、開発者は堅牢でパフォーマンスの高い Web アプリケーションを構築できるようになります。


    私のウェブサイト: https://shafayet.zya.me


    あなたのためのミーム (共感できるかもしれません...)??

    Mastering JavaScript Event Delegation

    以上がJavaScript イベント委任をマスターするの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

    声明
    この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
    JavaScriptの文字列文字を交換しますJavaScriptの文字列文字を交換しますMar 11, 2025 am 12:07 AM

    JavaScript文字列置換法とFAQの詳細な説明 この記事では、javaScriptの文字列文字を置き換える2つの方法について説明します:内部JavaScriptコードとWebページの内部HTML。 JavaScriptコード内の文字列を交換します 最も直接的な方法は、置換()メソッドを使用することです。 str = str.replace( "find"、 "置換"); この方法は、最初の一致のみを置き換えます。すべての一致を置き換えるには、正規表現を使用して、グローバルフラグGを追加します。 str = str.replace(/fi

    独自のAjax Webアプリケーションを構築します独自のAjax Webアプリケーションを構築しますMar 09, 2025 am 12:11 AM

    それで、あなたはここで、Ajaxと呼ばれるこのことについてすべてを学ぶ準備ができています。しかし、それは正確には何ですか? Ajaxという用語は、動的でインタラクティブなWebコンテンツを作成するために使用されるテクノロジーのゆるいグループ化を指します。 Ajaxという用語は、もともとJesse Jによって造られました

    10 jQueryの楽しみとゲームプラグイン10 jQueryの楽しみとゲームプラグインMar 08, 2025 am 12:42 AM

    10の楽しいjQueryゲームプラグインして、あなたのウェブサイトをより魅力的にし、ユーザーの粘着性を高めます! Flashは依然としてカジュアルなWebゲームを開発するのに最適なソフトウェアですが、jQueryは驚くべき効果を生み出すこともできます。また、純粋なアクションフラッシュゲームに匹敵するものではありませんが、場合によってはブラウザで予期せぬ楽しみもできます。 jquery tic toeゲーム ゲームプログラミングの「Hello World」には、JQueryバージョンがあります。 ソースコード jQueryクレイジーワードコンポジションゲーム これは空白のゲームであり、単語の文脈を知らないために奇妙な結果を生み出すことができます。 ソースコード jquery鉱山の掃引ゲーム

    独自のJavaScriptライブラリを作成および公開するにはどうすればよいですか?独自のJavaScriptライブラリを作成および公開するにはどうすればよいですか?Mar 18, 2025 pm 03:12 PM

    記事では、JavaScriptライブラリの作成、公開、および維持について説明し、計画、開発、テスト、ドキュメント、およびプロモーション戦略に焦点を当てています。

    jQuery Parallaxチュートリアル - アニメーションヘッダーの背景jQuery Parallaxチュートリアル - アニメーションヘッダーの背景Mar 08, 2025 am 12:39 AM

    このチュートリアルでは、jQueryを使用して魅惑的な視差の背景効果を作成する方法を示しています。 見事な視覚的な深さを作成するレイヤー画像を備えたヘッダーバナーを構築します。 更新されたプラグインは、jQuery 1.6.4以降で動作します。 ダウンロードしてください

    ブラウザでのパフォーマンスのためにJavaScriptコードを最適化するにはどうすればよいですか?ブラウザでのパフォーマンスのためにJavaScriptコードを最適化するにはどうすればよいですか?Mar 18, 2025 pm 03:14 PM

    この記事では、ブラウザでJavaScriptのパフォーマンスを最適化するための戦略について説明し、実行時間の短縮、ページの負荷速度への影響を最小限に抑えることに焦点を当てています。

    jqueryとajaxを使用した自動更新Divコンテンツjqueryとajaxを使用した自動更新DivコンテンツMar 08, 2025 am 12:58 AM

    この記事では、JQueryとAjaxを使用して5秒ごとにDivのコンテンツを自動的に更新する方法を示しています。 この例は、RSSフィードからの最新のブログ投稿と、最後の更新タイムスタンプを取得して表示します。 読み込み画像はオプションです

    Matter.jsを始めましょう:はじめにMatter.jsを始めましょう:はじめにMar 08, 2025 am 12:53 AM

    Matter.jsは、JavaScriptで書かれた2D Rigid Body Physics Engineです。このライブラリは、ブラウザで2D物理学を簡単にシミュレートするのに役立ちます。剛体を作成し、質量、面積、密度などの物理的特性を割り当てる機能など、多くの機能を提供します。また、重力摩擦など、さまざまな種類の衝突や力をシミュレートすることもできます。 Matter.jsは、すべての主流ブラウザをサポートしています。さらに、タッチを検出し、応答性が高いため、モバイルデバイスに適しています。これらの機能はすべて、物理ベースの2Dゲームまたはシミュレーションを簡単に作成できるため、エンジンの使用方法を学ぶために時間をかける価値があります。このチュートリアルでは、このライブラリのインストールや使用法を含むこのライブラリの基本を取り上げ、

    See all articles

    ホットAIツール

    Undresser.AI Undress

    Undresser.AI Undress

    リアルなヌード写真を作成する AI 搭載アプリ

    AI Clothes Remover

    AI Clothes Remover

    写真から衣服を削除するオンライン AI ツール。

    Undress AI Tool

    Undress AI Tool

    脱衣画像を無料で

    Clothoff.io

    Clothoff.io

    AI衣類リムーバー

    AI Hentai Generator

    AI Hentai Generator

    AIヘンタイを無料で生成します。

    ホットツール

    SecLists

    SecLists

    SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

    MinGW - Minimalist GNU for Windows

    MinGW - Minimalist GNU for Windows

    このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

    SublimeText3 Mac版

    SublimeText3 Mac版

    神レベルのコード編集ソフト(SublimeText3)

    SAP NetWeaver Server Adapter for Eclipse

    SAP NetWeaver Server Adapter for Eclipse

    Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

    ゼンドスタジオ 13.0.1

    ゼンドスタジオ 13.0.1

    強力な PHP 統合開発環境