JavaScript イベントバブリング、イベントキャプチャ、イベント委任の詳細な説明

JavaScript イベントバブリング、イベントキャプチャ、イベント委任の詳細な説明

1. イベントバブリング: JavaScript イベント伝播のプロセスでは、要素でイベントがトリガーされると、そのイベントはドキュメントまで段階的に先行要素に伝播し、一部のブラウザではウィンドウに到達することがあります。すべてのイベントにバブリングがあるわけではありません。例: blurイベント、 focusイベント、 loadイベント

2. イベント委任: イベント キャプチャは、イベント バブリングと正反対です。イベントが要素をトリガーするまで、最上位の祖先要素から開始されます。

js イベント キャプチャは通常、DOM2 イベント モデルaddEventListenerを通じて実装されます。

target.addEventListener(タイプ、リスナー、useCapture)

3 番目のパラメータはデフォルトで false に設定されており、イベントがバブリング フェーズでトリガーされることを示します。true に設定すると、キャプチャ フェーズでトリガーされます。一般に、イベント キャプチャは私たちの作業ではほとんど使用されないようです。しかし、まだ理解する必要がある

<div id="ボックス">
    <div id="middle">
        <div id="内部"></div>
    </div>
</div>
<スクリプト>
//イベントキャプチャ window.onload=function(){
    box = document.getElementById("box"); とします。
    middle = document.getElementById("middle"); とします。
    inner を document.getElementById("inner"); とします。
    box.addEventListener("click",function(){console.log("box")},true);
    middle.addEventListener("click",function(){console.log("middle")},true);
    inner.addEventListener("click",function(){console.log("inner")},true);
}
</スクリプト>
innerをクリックすると、コンソールにbox、middle、innerと出力されます。

イベントのバブリングを停止

通常、多数のイベントバブリングイベントが使用されますが、特定の子タグでは親にイベントを渡す必要がない場合があります。このとき、そのイベントのバブリングを防ぐ必要があります。

一般的に、stopPropagation はイベントのバブリングを防ぐために使用されます。IE では、cancelBuble=true が使用されます。stopPropagation もイベント オブジェクト (Event) のメソッドです。その機能は、対象要素のイベントのバブリングを防ぐことですが、デフォルトの動作を防ぐことはできません。

//イベントのバブルを防ぐ let btna = document.getElementById('btn');
btna.onclick=関数(e){
    window.event? window.event.cancelBubble = true : e.stopPropagation();
 };

3. イベント委任: イベント委任はイベント プロキシとも呼ばれます。イベント委任ではイベント バブリングを利用します。イベント ハンドラーを 1 つだけ指定することで、特定のタイプのすべてのイベントを管理できます。

利点: DOM 操作を減らすと、Web ページのパフォーマンスが向上します。ページの親要素と多くの子要素が同じイベントを操作する必要がある場合、各要素にイベントをバインドすることはできません。

<ul id="getNum">
    <li>1</li>
    <li>2</li>
    <li>3</li>
    <li>4</li>
    <li>5</li>
    <li>6</li>
</ul>
<スクリプト>
ptclick = document.getElementById('getNum'); とします。
lilist = ptclick.querySelectorAll('li') とします。
for(let i=0;i<lilist.length;i++){
    lilist[i].index = i;
};
ptclick.onclick = 関数(e){
    var e = e || window.event;
    var ターゲット = e.target || e.srcElement;
    console.log(e.target.index);
};
</スクリプト>

要約する

この記事はこれで終わりです。皆さんのお役に立てれば幸いです。また、123WORDPRESS.COM のその他のコンテンツにも注目していただければ幸いです。

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

<<:  CSS マルチカラムレイアウトソリューション

>>:  HTMLページでよく使われるいくつかの小さなメソッド

推薦する

Linux の操作とメンテナンスの基本システムディスク管理チュートリアル

1. ディスクパーティション: 2. fdiskパーティションディスクが2 TB未満の場合はfdis...

Docker イメージの作成、アップロード、プル、およびデプロイ操作 (Alibaba Cloud を使用)

学習プロセス中にプッシュ イメージが常にタイムアウトすることがわかったため、Alibaba Clou...

Linux環境でのActiveMQ導入方法の詳しい説明

この記事では、Linux 環境での ActiveMQ の展開方法について説明します。ご参考までに、詳...

Vueはタブナビゲーションバーを実装し、左右のスライド機能をサポートしています

この記事では主に、Vue を使用してタブ ナビゲーション バーを実装し、flex レイアウトを使用し...

ウェブページの読み込み速度を上げる簡単なヒント

Web ページの読み込み速度は、Web サイトの品質を評価するための重要な指標です。その理由は、ほと...

JavaScript でカルーセル効果を実装する

この記事では、カルーセルの効果を実現するためのJavaScriptの具体的なコードを参考までに共有し...

Reactイベントバインディングの詳細な説明

1. 何ですかreactアプリケーションでは、イベント名はキャメルケース形式で記述されます。たとえ...

CentOSにDockerをインストールする方法

ここでは比較的簡単なインストール方法のみを紹介します。 1. yumを使用してインストールするyum...

tbodyタグの魔法はテーブルコンテンツの表示を高速化します

他の人のウェブページを保存して見たことがあると思いますが、特にdwで開くと、多くのウェブページに&l...

Linuxダイナミックリンクライブラリの使用

通常のプログラムと比較すると、ダイナミック リンク ライブラリにはメイン関数がなく、一連の関数の実装...

Bootstrap5 ブレークポイントとコンテナの具体的な使用法

目次1. Bootstrap5 ブレークポイント1.1 モバイルファースト1.2 ブートストラップブ...

yumコマンドの使い方

1. yumの紹介Yum (フルネームは Yellow dogUpdater、Modified) は...

Linux は、Deepin がルートユーザーとして Google Chrome ブラウザを起動できない問題を解決します

Deepin がルートユーザーとして Google Chrome ブラウザを起動できない問題を解決す...

MySQL アクティブ-アクティブ同期レプリケーションの 4 つのソリューションの詳細な説明

目次MySQLネイティブレプリケーションに基づくマスター-マスター同期ソリューションGaleraレプ...

ウェブページのコピー防止機能の実装方法(クラッキング手法付き)

ソース ファイルを右クリックすると、次のコードが見つかります。 1. CSSを使用してFirefox...