ホームページ  >  記事  >  ウェブフロントエンド  >  jquery: デリゲートが繰り返しイベントをトリガーする問題の解決策

jquery: デリゲートが繰り返しイベントをトリガーする問題の解決策

黄舟
黄舟オリジナル
2017-06-26 10:16:392585ブラウズ

jquery: デリゲートがイベントを繰り返しトリガーします問題の解決策

<html>
<head>
<script type="text/javascript" src="http://www.w3school.com.cn/jquery/jquery.js"></script>
<style>
div{border:1px solid balck;padding:5px;margin:2px;}
</style>
</HEAD>
<body>
<div id="div1" >div1
    <div id="div1_1" >div1_1
        <div id="div1_1_1" >div1_1_1
            <span style="background:red; display:block; width:25px; height:25px;">span</span>
        </div>
    </div>
    <div id="div1_2" >div1_2
    </div>
</div>
</body>
<script type="text/javascript">
$(&#39;body&#39;).delegate(&#39;body>div&#39;,&#39;click&#39;,function(){alert("div");});
$(&#39;body&#39;).delegate(&#39;div>span&#39;,&#39;click&#39;,function(){alert("span");});
</script>
</HTML>

スパンエリアがクリックされたときにdivクリックイベントがトリガーされないようにするにはどうすればよいですか? ? ?

$(&#39;body&#39;).delegate(&#39;div>span&#39;,&#39;click&#39;,function(evt){ evt.stopPropagation(); alert("span");  } );

Span のクリックイベントのバブリングをキャンセルする 答えは 1 階にあります: e.stopPropagation()~

方法 1. イベントのバブリングを防ぐ
方法 2. イベントトリガーを決定する

$(&#39;body&#39;).delegate(&#39;body>div&#39;,&#39;click&#39;,function(){
if(e.target!=$(&#39;#div1_1_1&#39;).find(&#39;span&#39;)[0]) alert("div");
});

方法1.イベントのバブリングを防ぐ
方法2.イベントトリガーを決める

$(&#39;body&#39;).delegate(&#39;body>div&#39;,&#39;click&#39;,function(){
if(e.target!=$(&#39;#div1_1_1&#39;).find(&#39;span&#39;)[0]) alert("div");
});
$(&#39;body&#39;).delegate(&#39;body>div&#39;,&#39;click&#39;,function(e){
if(e.target!=$(&#39;#div1_1_1&#39;).find(&#39;span&#39;)[0]) alert("div");
});

試してみました

以上がjquery: デリゲートが繰り返しイベントをトリガーする問題の解決策の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。