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

推薦する

mySQLキーワードの実行優先度の説明

以下のように表示されます。表から条件フィールドでグループ化仮想テーブルとフィールドを作成し、フィール...

nginx 設定チュートリアルにおける add_header の落とし穴の詳細な説明

序文add_header は、headers モジュールで定義されたディレクティブです。名前が示すよ...

HTMLを使用して、IPを制限する投票ウェブサイトの不正行為スキームを実装する

これは、IP アドレスが制限されている投票 Web サイトの不正行為の手口です。この方法は、投票 W...

Vueは3段階のナビゲーション表示と非表示を実装します

この記事では、3階層ナビゲーションの表示と非表示を実現するためのVueの具体的なコードを例として紹介...

CSS3 でシンプルな白い雲が浮かぶ背景効果を実現

これは非常にシンプルな純粋な CSS3 の白い雲の浮遊する背景効果です。浮かぶ白い雲の特殊効果は、C...

MySQLがbinlogファイルを手動で登録し、マスタースレーブ異常を引き起こす理由

1. 問題の原因友人の @水米田 から、POSITION に基づくマスタースレーブについて質問があり...

Webデザインチュートリアル(6):デザインへの情熱を持ち続ける

<br />前の記事:Webデザインチュートリアル(5):Webビジュアルデザイン。 1...

CSS3 背景コントロールプロパティと色遷移を使用してグラデーション効果を実現します。

CSS3 背景画像関連互換性: IE9+背景クリップ 背景画像描画領域background-cli...

MySQL スケジュールされたデータベース バックアップ操作の例

この記事では、MySQL のスケジュールされたデータベース バックアップ操作の例について説明します。...

MySQLデータベースの使用仕様の概要

導入: MySQL データベースの仕様に関しては、皆さんも何らかのドキュメントを読んだことがあると思...

Nodejs でタイムドクローラーを実装する完全な例

目次事件の原因Node Scheduleを使用してスケジュールされたタスクを実装する1. node-...

WeChatアプレットの入力レベルとテキストエリアレベルの浸透率が高すぎる問題の解決策

WeChat ミニプログラムのネイティブ コンポーネントであるカメラ、キャンバス、入力 (フォーカス...

CentOS 7.6 Telnetサービス構築プロセス(Opensshアップグレードバトル第一弾のバックアップトランスポートライン構築)

不明な点があるときはいつでも、Blog Park にアクセスして、いつでも答えやインスピレーションを...

Bootstrapはカルーセルの効果を実現します

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

JS はデータ URL をどのように理解するのでしょうか?

目次概要データ URL の使用を開始するデータURL構文複数言語の文字列のBase64エンコードとデ...