JavaScript でイベントのバブリングを防ぐ方法

JavaScript でイベントのバブリングを防ぐ方法

注意すべき点は、イベントバブリング自体の特性上、メリットだけでなくデメリットも生じるということです。これについては、次回以降のブログで詳しく説明します。

  • そこで、ここではイベントのバブリングを防ぐ方法について説明します。
  • たとえば、現在、子ボックスと親ボックスがあります。子ボックスと親ボックスの両方にクリック イベントがありますが、この時点では、子ボックスをクリックしたときに、子ボックスにのみクリック イベントが表示されるようにします。ここでは、イベントのバブリングを防止する方法を使用して、親ボックスのイベント表示を分離する必要があります。

まず、次に示すように 2 つのボックスを作成し、それらにクリック イベントを追加します。

<!DOCTYPE html>
<html lang="ja">
<ヘッド>
    <メタ文字セット="UTF-8">
    <meta http-equiv="X-UA-compatible" content="IE=edge">
    <meta name="viewport" content="width=デバイス幅、初期スケール=1.0">
    <title>ドキュメント</title>
    <スタイル>
        。父親{
            マージン: 100px 自動;
            幅: 100ピクセル;
            高さ:100px;
            オーバーフロー: 非表示;
            背景色: 淡い緑;
        }
        。息子{
            幅: 50px;
            高さ: 50px;
            左マージン: 25px;
            上マージン: 25px;
            背景色: 淡いターコイズ;
        }
    </スタイル>
</head>
<本文>
    <div class="父">
        <div class="son"></div>
    </div>
    <スクリプト>
        var 父親 = document.querySelector('.父親');
        var son = document.querySelector('.son');
       son.addEventListener('click',function(){
            警告('息子');
        }、間違い)
        父親.addEventListener('click',function(){
            警告('父');
        }、間違い)
    </スクリプト>
</本文>
</html>

子ボックスのクリック イベントをクリックすると、印刷結果は次のようになります。

親ボックスのクリック イベントをブロックするにはどうすればよいでしょうか?

サブボックス内のクリック イベントにstopPropagation()メソッドを直接追加できます。

以下のように表示されます。

son.addEventListener('click',function(e){
            警告('息子');
            e.stopPropagation();
        }、間違い)


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

成功を阻止します。

ただし、この方法にも互換性の問題があることに注意してください。下位バージョンのブラウザ (IE 6 ~ 8) では、通常、イベント オブジェクトの cancelBubble プロパティが操作に使用されます。つまり、対応するクリック イベントに直接追加します。

e.cancelBubble = true;


この互換性の問題を解決したい場合は、次の方法を使用できます。

if(e && e.stopPropagation){
      e.stopPropagation();
  }それ以外{
      ウィンドウのイベントをキャンセルするには、次の手順を実行します。
  }

JavaScript によるイベント バブリングの防止に関するこの記事はこれで終わりです。JavaScript によるイベント バブリングの防止に関するより関連性の高いコンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • イベントバブリングを防ぐJSメソッドの詳しい説明
  • JavaScript キャプチャイベントとバブリングイベントの防止例の分析
  • ブラウザのデフォルトの動作を防ぐために js イベントのバブリングを停止する方法について簡単に説明します (ハイパーリンクの防止#)
  • JavaScriptはイベントのバブリングとブラウザのデフォルトの動作を防止します
  • バブリング防止とデフォルトイベント(デフォルト動作)の js の詳細な説明
  • js イベントバブリング、イベントキャプチャ、デフォルトイベントのブロックの詳細な説明
  • JS 作業のヒント: イベント委譲の「クロージャ」と「バブリング防止」

<<:  CSSボックスモデルの紹介を読めば、混乱することはなくなるでしょう

>>:  MySQL 8で追加された3つの新しいインデックスは、非表示、降順、関数です。

推薦する

Linux のプロセスクラッシュの原因をコアダンプ技術を使用して追跡する簡単な分析

最近、プロジェクトで問題が発生しました。サーバー側のプログラムが突然クラッシュして終了しました。クラ...

NavicatでMySqlスケジュールタスクを作成する方法の詳細な説明

Navicat で MySql スケジュールタスクを作成する詳細な説明イベントは、MySQL が特定...

HTML で dl(dt,dd)、ul(li)、ol(li) を使用する方法

HTML <dl> タグ#定義と使用法<dl> タグは定義リストを定義します...

Docker デプロイメント RabbitMQ コンテナ実装プロセス分析

1. イメージをプルするまず、次のコマンドを実行して、イメージをローカル コンピューターにダウンロー...

Vue での weixin-js-sdk の一般的な使用方法の詳細な説明

リンク: https://qydev.weixin.qq.com/wiki/index.php?ti...

WeChatミニプログラムでのマップの正しい使用例

目次序文1. 準備2. 実際の戦闘2.1 ミニプログラムの権限を設定する2.2 カプセル化ツールの機...

MySQLインデックスに関する重要な面接の質問をいくつか共有します

序文インデックスは、データベース内の 1 つ以上の列の値を並べ替え、データベースが効率的にデータを取...

スクロールバーの美化効果を実現するための CSS3 のサンプル コード

具体的なコードは次のとおりです。 /*スクロールバーの幅*/ ::-webkit-スクロールバー{ ...

js 正規表現の先読みと後読み、および非キャプチャグループ化

目次先読みと後読みをキャプチャグループと組み合わせる捕獲グループと非捕獲グループ前を向いて、後ろを振...

Docker コンテナのログを表示およびクリーンアップする方法 (テスト済みで効果的)

1. 問題Docker コンテナのログにより、ホストのディスク領域がいっぱいになりました。 doc...

Postman 自動インターフェーステストの実践

目次背景説明GETリクエストの作成事前リクエストスクリプトで署名を作成するスクリプトは環境変数に書き...

jsドラッグ効果の原理と実装

ドラッグ機能は主に、ドラッグによる並べ替え、ポップアップ ボックスのドラッグと移動など、ユーザーがカ...

Nginx ソースコードのコンパイルとインストールのプロセス記録

rpm パッケージのインストールは比較的簡単なので、ここでは説明しません。ほとんどのオープンソース ...

Linux 上での MySQL データベースのリモート展開の詳細な手順

LinuxリモートMySQLデータベースの展開、参考までに、具体的な内容は次のとおりです。 1.0 ...

JavaScript の高度なクロージャの説明

目次1. 閉鎖の概念追加の知識ポイント: 2. 閉鎖の役割: 3. 閉鎖例3.1 liをクリックする...