ホームページ > ウェブフロントエンド > jsチュートリアル > JQuery はイベントのバブリングを防止します

JQuery はイベントのバブリングを防止します

高洛峰
リリース: 2016-11-16 13:03:44
オリジナル
1072 人が閲覧しました

バブリング イベントは子ノードをクリックすることで、親ノードと祖先ノードのクリック イベントが上向きにトリガーされます。

通常の開発プロセスでは、div を div でラップする状況が必ず発生します (この div は要素である可能性があります)。ただし、内側の div をクリックすると、イベントが追加されます。この div のイベントを処理しますが、この時点では、外側の div のイベントも実行しないようにする必要があります。

平たく言えば、あなたは家でテレビを見ながら自分の狭い部屋に隠れていますが、その音が隣の親の耳に届くのを嫌って、この時下に隠れているかもしれません。ベッドや壁は非常に防音性が高く、音を遮断するということは、泡を遮断することと理解できます。

<style>
        #content{
            width: 140px;
            border: 1px solid blue;
        }
        #msg{
            width: 100px;
            height: 100px;
            margin: 20px;
            border: 1px solid red;
        }
</style>
 
 
  <body>
          <div id="content">
                  外层div
                       <div id="msg">
                             内层div
                       </div>
           </div>
 
  </body>
ログイン後にコピー

JQuery はイベントのバブリングを防止します

結果の表示

対応するjQueryコードは以下の通りです:

<script type="text/javascript" src="js/jquery-1.8.3.js"></script>
    <script type="text/javascript">
    $(function(){        // 为内层div绑定click事件        $("#msg").click(function(){
            alert("我是小div");
        });     // 为外层div元素绑定click事件        $("#content").click(function(){
            alert("我是大div");
        });        // 为body元素绑定click事件        $("body").click(function(){
            alert("我是body");
        });
    });        
        
    </script>
ログイン後にコピー

小さいdivをクリックすると、大きいdivとbodyのクリックイベントがトリガーされます。大きなdivをクリックするとbodyのクリックイベントがトリガーされます。

このようなバブリングイベントの発生を防ぐにはどうすればよいですか?

次のように変更します:

<script type="text/javascript" src="js/jquery-1.8.3.js"></script>
    <script type="text/javascript">
    $(function(){
        // 为内层div绑定click事件
        $("#msg").click(function(event){
            alert("我是小div");
            event.stopPropagation();    //  阻止事件冒泡
        });
     // 为外层div元素绑定click事件
        $("#content").click(function(event){
            alert("我是大div");
            event.stopPropagation();    //  阻止事件冒泡
        });
        // 为body元素绑定click事件
        $("body").click(function(event){
            alert("我是body");
            event.stopPropagation();    //  阻止事件冒泡
        });
    });
ログイン後にコピー

event.stopPropagation(); // イベントのバブリングを防止します

送信ボタンをクリックすると、デフォルトのイベントが発生する場合があります。たとえば、別のインターフェイスにジャンプします。ただし、検証に合格しない場合は、ジャンプしないでください。この時点で、event.preventDefault(); //デフォルトの動作(フォーム送信)を防止できます。

html part

<body>
        <form action="test.html">
            用户名:<input type="text" id="username" />
            <br/>
            <input type="submit" value="提交" id="sub"/>
        </form>
   </body>
ログイン後にコピー

JQuery はイベントのバブリングを防止します

<script type="text/javascript" src="js/jquery-1.8.3.js"></script>
    <script type="text/javascript">
        $(function(){
            $("#sub").click(function(event){
                //获取元素的值,val() 方法返回或设置被选元素的值。
                var username = $("#username").val();  
                //判断值是否为空
                if(username==""){ 
                    //提示信息
                    //alert("文本框的值不能为空");
                    $("#msg").html("<p>文本框的值不能为空.</p>"); 
                  //阻止默认行为 ( 表单提交 )
                    event.preventDefault();  
                }
            });
        });
    </script>
ログイン後にコピー

//デフォルトの動作を防止する (フォーム送信)event.preventDefault();

デフォルトの動作を防止するもう 1 つの方法は、false を返すことです。効果も同様です。

コードは次のとおりです:

<script type="text/javascript" src="js/jquery-1.8.3.js"></script>
    <script type="text/javascript">
        $(function(){
            $("#sub").click(function(event){
                //获取元素的值,val() 方法返回或设置被选元素的值。
                var username = $("#username").val();  
                //判断值是否为空
                if(username==""){ 
                    //提示信息
                    //alert("文本框的值不能为空");
                    $("#msg").html("<p>文本框的值不能为空.</p>"); 
                  //阻止默认行为 ( 表单提交 )
                    //event.preventDefault();  
                  return false;
                }
            });
        });
    </script>
ログイン後にコピー

同様に、上記のバブリングイベントも return false で処理できます。

りー


関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート