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つの新しいインデックスは、非表示、降順、関数です。

推薦する

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

最近 Django を導入しましたが、MySQL を手動でインストールしたくなかったので、Docke...

vue3を使用して人間と猫のコミュニケーションアプレットを実装する

目次序文プロジェクトを初期化するデザインコードの実装オンデマンドロードオーディオを再生録音長押しイベ...

CSS3 タブアニメーションの例 背景切り替えの動的効果

CSS 3 アニメーションの例 - タブの背景切り替えの動的効果、具体的なコードは次のとおりです。 ...

Docker+Selenium Grid に基づく技術アプリケーションをテストするためのサンプル コード

Selenium Grid の紹介Selenium Grid のいくつかの新しい機能は、今後リリース...

JavaScript モバイル H5 画像生成ソリューションの説明

現在、WeChatパブリックアカウントの運用活動が多く、写真を生成する必要があります。生成された写真...

CentOS6.5 でファイル共有サービス Samba を構築するチュートリアル

Samba サービス:このコンテンツはサンバサービス学習者の参考用ですケースの説明:企業の管理者は、...

react-color を使用してフロントエンドのカラーピッカーを実装する方法

背景次の図に示すように、 react-color を使用してフロントエンド インターフェースのカラー...

MySQL の char、varchar、text フィールド タイプの違い

MySQL では、char、varchar、text の各タイプのフィールドはすべて文字タイプのデー...

「@INC で ExtUtils/MakeMaker.pm が見つかりません」というエラーを解決する

mha4mysql をインストールする場合の手順は、おおよそ次のようになります: unzip、per...

Vue Element Sortablejs を使用してテーブル列をドラッグする詳細な説明

1. css: ドラッグテーブル.css @charset "UTF-8"; ....

Dockerコンテナを使用する簡単な例

目次1. イメージをプルする2. イメージを実行する3. コンテナ内でアプリケーションをテストする4...

Linux (Ubuntu 18.04) に Anaconda をインストールする詳細な手順

Anaconda は、大規模なデータ処理、予測分析、科学計算のための最も人気のある Python デ...

MySQL のロックとトランザクションの簡単な分析

MySQL 自体はファイルシステムに基づいて開発されましたが、ロックの存在が異なります。データベース...

Nginxドメイン名転送の実装

Nginx の紹介Nginx (「エンジン x」) は、ロシアのプログラマー Igor Sysoev...

MySQLがクエリキャッシュをキャンセルした理由

MySQL には以前、クエリ キャッシュ (Query Cache) がありました。8.0 以降では...