Javascript イベントキャプチャとバブリングメソッドの詳細な説明

Javascript イベントキャプチャとバブリングメソッドの詳細な説明

1. イベント処理モデル

イベント バブリングとイベント キャプチャリング: イベント バブリングとイベント キャプチャリングは、それぞれ Microsoft と Netscape によって提案されました。どちらの概念も、ページ内のイベント フロー (イベントが発生する順序) の問題を解決することを目的としています。

<div id="d1">
        <div id="d2">
            <div id="d3"></div>
        </div>
</div>

3 つのネストされた div がある場合、3 つの要素に同じイベントが登録されると、それらのトリガー順序はどのようになりますか?

1. イベントバブリング

Microsoft は、イベント バブリングと呼ばれるイベント ストリームを提案しました。構造的に(視覚的にではなく)ネストされた要素にはバブリング機能があり、つまり同じイベントが子要素から親要素にバブリングします。 (ボトムアップ)

上記の例では、バブリング方式を使用する場合、トリガー順序は d3——>d2——>d1 となるはずなので、確認してみましょう。

(1)3つのdiv要素にイベントをバインドする

//1. 要素を取得する var d1 = document.querySelector('#d1')
var d2 = document.querySelector('#d2')
var d3 = document.querySelector('#d3')
//2. イベントのバインド d1.onclick = function(){
     コンソールログ(このID)
  }
d2.onclick = 関数(){
      コンソールログ(このID)
  }
d3.onclick = 関数(){
      コンソールログ(このID)
   }

(2)運用実績:

赤い部分をクリックしてください:

紫色の領域をクリックします。

緑色の領域をクリックします:

以上、イベント盛り上がってます!

2. イベントキャプチャ

構造的に(視覚的にではなく)ネストされた要素には、イベント キャプチャの機能があります。つまり、親要素から子要素(イベント ソース要素)に同じイベントがキャプチャされます。 (トップダウン) (つまり、イベントはキャプチャされません)

上記の例では、バブリング方式を使用する場合、トリガー順序は d1——>d2——>d3 となるはずなので、確認してみましょう。

(1)3つのdiv要素にイベントをバインドする

//1. 要素を取得する var d1 = document.querySelector('#d1')
var d2 = document.querySelector('#d2')
var d3 = document.querySelector('#d3')
//2. イベントのバインド d1.onclick = function(){
     コンソールログ(このID)
  }
d2.onclick = 関数(){
      コンソールログ(このID)
  }
d3.onclick = 関数(){
      コンソールログ(このID)
   }

(2)運用実績:

赤い部分をクリックしてください:

紫色の領域をクリックします。

緑色の領域をクリックします:

イベント攻略ゲット!!!

知らせ:

  • トリガーの順序: 最初にキャプチャ、次にバブリング
  • focusblurchangesubmitresetselectなどのイベントはバブルしません。

2. イベントのバブルを防ぐ

(1) W3C標準のevent.stopPropagation(); ですが、IE9以下ではサポートされていません。

//1. 要素を取得する var d1 = document.querySelector('#d1')
var d2 = document.querySelector('#d2')
var d3 = document.querySelector('#d3')
//2. イベントのバインド d1.onclick = function(){
     コンソールログ(このID)
  }
d2.onclick = 関数(){
      コンソールログ(このID)
  }
d3.onclick = 関数(e){
      e.stopPropagation();
      コンソールログ(このID)
   }

緑色の領域をクリックすると、外部イベントが順番にトリガーされず、イベントのバブリングがブロックされることがわかります。

(2) IE固有: event.cancelBubble = true;

//1. 要素を取得する var d1 = document.querySelector('#d1')
var d2 = document.querySelector('#d2')
var d3 = document.querySelector('#d3')
//2. イベントのバインド d1.onclick = function(){
     コンソールログ(このID)
  }
d2.onclick = 関数(){
      コンソールログ(このID)
  }
d3.onclick = 関数(e){
      e.cancelBubble = true;
      コンソールログ(このID)
   }

結果は(1)と同じである。

(3)マージキャンセル:falseを返す

JavaScript では、 return falseとデフォルトの動作のみが防止されますが、jQuery ではデフォルトの動作とオブジェクトのバブルの両方が防止されます。

要約する

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

以下もご興味があるかもしれません:
  • 最もよく使用されるJavaScriptイベントについて詳しく学ぶ
  • JavaScriptのイベントループの仕組みの分析
  • JavaScript イベント キャプチャ バブリングとキャプチャの詳細
  • jsイベント委譲の詳細な説明
  • js におけるイベントバブリングとイベントキャプチャの簡単な分析
  • JavaScript イベント ループのケース スタディ

<<:  CSSレイアウトにおけるフローティング問題に対する4つの解決策の詳細な説明

>>:  バックアップと削除のためにリアルタイムでステートメントを検出するMySQLトリガーの考え方の詳細な説明

推薦する

Linux で実行中のバックグラウンド プログラムを表示および終了する方法

Linux タスク管理 - バックグラウンド実行と終了fg、bg、ジョブ、&、ctrl + ...

Windows 10 無料インストール版の MySQL インストールと設定のチュートリアル

ネットでいろいろ検索してみたところ、Linux システム向けではなく、現在の新しいバージョンと一致し...

フォーム検証機能を実装するためのネイティブ js

目次開発の際には、機能を段階的に分析して実装することで、明確な考え方を保つことができます。 1. フ...

MySQLデータベーストリガーの詳細な説明

目次1 はじめに2 トリガーの紹介3 トリガーを作成する4 トリガーを表示5. トリガーの削除6 結...

ウェブページの読み込み速度を上げる25の方法とヒント

はじめに<br />誰もが高速インターネット接続にアクセスできるわけではありません。たと...

Vue3.0 ルーティング自動インポート方法の例

1. 前提条件インポートには require.context メソッドを使用します。vite で作成...

HTML で複数のクラス属性を定義する場合の無効な解決策

HTML を記述する過程で、クラス属性に複数の値を定義することがよくありますが、定義した値が無効であ...

IDEA の Docker プラグインを介して Springboot プロジェクトを公開する方法の詳細なチュートリアル

1. Dockerfileを書く(1)プロジェクト名を右クリックして新しいテキストファイルを作成し、...

TypeScript の基本型の紹介

目次1. 基本タイプ2. オブジェクトタイプ2.1 配列2.2 タプル2.3 オブジェクト3. 型推...

優れたウェブフロントエンドデザインの指標

Web ページのアクセシビリティは、フロントエンドでのみ評価および実装できるもののようです。ユーザビ...

Presto をインストールし、Docker で Hive を接続する詳細なプロセス

1. はじめにPresto は、ギガバイトからペタバイトに及ぶデータ ソースに対してインタラクティブ...

Docker で Java 8 Spring Boot アプリケーションを開発する方法

この記事では、ローカル マシンに Java 8 をインストールせずに、Java 8 を使用して簡単な...

docker+jenkins+node.js の自動デプロイメント環境をゼロから構築する方法

このケースはCentOS 7システムに基づいていますDockerの使用経験がある人に適していますLi...

Webフロントエンドベクターアイコンの使い方

序文フロントエンドページを書くとき、小さなアイコンなどの画像を使うことが多いです。画像を使うとコード...

MySQL でよく使用される SQL 文を表示する (詳細な説明)

#mysql -uroot -pパスワードを入力してくださいmysql> show full...