JS イベントバブリングとは何ですか?
オブジェクトで特定のタイプのイベント (onclick イベントなど) をトリガーします。オブジェクトがこのイベントのハンドラーを定義している場合、このイベント ハンドラーが定義されていない場合、またはイベントが true を返した場合、このイベントはこのハンドラーを呼び出します。 、その後、このイベントは、処理されるまで (親オブジェクトの同様のイベントがすべてアクティブ化される)、またはオブジェクト階層の最上位レベルに到達するまで、このオブジェクトの親オブジェクトに内側から外側に伝播します。ドキュメント オブジェクト (一部のブラウザはウィンドウです)。
Jquery イベントのバブリングを停止するにはどうすればよいですか?
小さな例で説明します
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title>Porschev---Jquery 事件冒泡</title> <script src="jquery-1.3.2-vsdoc.js" type="text/javascript"></script> </head> <body> <form id="form1" runat="server"> <div id="divOne" onclick="alert('我是最外层');"> <div id="divTwo" onclick="alert('我是中间层!')"> <a id="hr_three" href="http://www.baidu.com" rel="external nofollow" rel="external nofollow" mce_href="http://www.baidu.com" rel="external nofollow" rel="external nofollow" onclick="alert('我是最里层!')">点击我</a> </div> </div> </form> </body> </html>
たとえば、上記のページ、
3 つのレイヤーに分かれています: divOne は外側のレイヤー、divTwo は中間のレイヤー、hr_three は最も内側のレイヤーです。
これらはすべて独自のクリック イベントを持ち、最も内側の a タグにも href 属性があります。
ページを実行し、[クリックしてください] をクリックすると、次の順にポップアップ表示されます: 私は最内層です---->私は中間層です---->私は最外層です
---->次に、Baidu にリンクします。
これはイベント バブリングです。当初は hr_three という ID のラベルをクリックしただけでしたが、3 つのアラート操作が実行されました。
イベント バブリング プロセス (タグ ID で表されます): hr_three----> divTwo----> divOne。最内層から最外層へ泡立ちます。
それを止めるにはどうすればよいですか?
<script type="text/javascript"> $(function() { $("#hr_three").click(function(event) { event.stopPropagation(); }); }); <script>
2.return false;
ヘッダーに以下のコードを追加した場合
<script type="text/javascript"> $(function() { $("#hr_three").click(function(event) { return false; }); }); <script>
もう一度「クリックしてください」をクリックすると、ポップアップが表示されます: 私は最内層ですが、Baidu ページへのリンクは実行されません
それは次のことからわかります:
イベント処理中、イベントのバブリングは防止されますが、デフォルトの動作はブロックされません (ハイパーリンクのジャンプが実行されます)
2. false を返す;
バブリングに関連するものがもう 1 つあります:
ヘッダーAタグのクリックイベントに入れると「Click me」をクリックします。
「私は最内層です---->私は中間層です---->私は最外層です」という順に表示されますが、最終的には百度にジャンプしません
その機能は次のとおりです: イベント処理中、イベントのバブリングはブロックされませんが、デフォルトの動作はブロックされます (すべてのポップアップ ボックスのみが実行され、ハイパーリンク ジャンプは実行されません)