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

推薦する

Vue Element UI カスタム説明リストコンポーネント

この記事の例では、Vue Element UIカスタム説明リストコンポーネントの具体的なコードを参考...

NetEase ブログで使用されているシンプルな Web ページ コード

NetEase Blog でコードを使用する方法: まずブログにログインし、ブログのホームページの左...

javascript:void(0) の意味と使用例

voidキーワードの紹介まず、void キーワードは JavaScript で非常に重要なキーワード...

単一のMySQLテーブルを復元する手順

休憩中に、眠気を完全に吹き飛ばす電話がかかってきました。「開発者が更新 SQL を書くときに whe...

Linux suse11でルートパスワードを忘れた場合に変更する方法の簡単な分析

SUSE Linuxでルートパスワードを忘れた場合の解決方法SUSE (Linux オペレーティング...

Linux で MySQL をインストールして設定する

システム: Ubuntu 16.04LTS 1\公式サイトからmysql-5.7.18-linux-...

WeChatアプレットはシンプルな計算機を実装する

参考までにWeChatアプレットで書かれた簡単な計算機です。具体的な内容は次のとおりです。 jisa...

Vue は左右のスライド効果のサンプルコードを実装します

序文個人の実際の開発で使用した効果問題を、今後の開発やレビューに役立てるためにまとめています。他の人...

MySQL エラー: ロックを取得しようとしたときにデッドロックが見つかりました。トランザクションの解決策を再起動してください

問題を見つける最近、以前のデータを入力していたときに、プログラムが突然次のエラーを報告しました。 [...

Linux コマンドライン操作 Baidu クラウドのファイルのアップロードとダウンロード

目次0. 背景1. インストール2. Baidu Cloudアカウントにログインする3. ファイルを...

MySql データベースのサブクエリと高度なアプリケーションの簡単な分析

MySql データベースのサブクエリ:サブクエリ: 選択クエリ ステートメント内に別の選択ステートメ...

ウェブレッスンプラン、初心者向けレッスンプラン

指導トピックウェブページ適用グレード高校2年生授業時間1 クラス教科書分析焦点: 静的および動的ウェ...

VMware WorkStation 14 pro インストール Ubuntu 17.04 チュートリアル

この記事では、VMware Workstation14 ProにUBuntu17.04をインストール...