コード:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>jQ--mouseenter测试</title> <style> *{margin: 0; padding: 0; color: #fff;} div{width: 100px; height: 100px; padding-top: 20px; background: green; margin: 100px auto;} p{width: 150px; height: 50px; background: red;} </style> <script src="jquery.js"></script> <!-- 1.9.0版 --> </head> <body> <div id="d"> <p>子元素</p> 父元素 </div> <script> var a=0; $(function(){ $('#d').mouseenter(function(){ /*#d,父元素,当mouseenter时背景变为黑色*/ $(this).css('background','#000'); }); $('#d p').mouseenter(function(){ /*#d p,子元素,当mouseenter时背景变为黑色*/ $(this).css('background','#000'); }); });
**マウスが子要素に移動したとき、.mouseenter()がバブルしないので子要素の背景だけが黒くなるのかと思いきや、結果として親要素も子要素も黒くなってしまいました。 。わかりません。mouseenter がバブルしません。子要素の背景だけが黒くなるのはなぜでしょうか。説明してください! **
1)mouseenterがバブルしないということは、要素がmouseenterイベントをキャプチャした後、その親要素は通知されなくなり、親要素はmouseenter時間を処理しなくなることを意味します。 2)2つのmouseenterについて。質問です
//只要元素进入div#d区域,mouseenter事件就会被触发 //一个mouse要进入一个子元素,必然经过其父元素,故鼠标达到子元素触发mouseenter后其父元素的mouseenter事件也会被触发 $('#d').mouseenter(function(){ /*#d,父元素,当mouseenter时背景变为黑色*/ $(this).css('background','#000'); }); //只要元素进入div#d p区域,也就是div#d的子元素p区域是,mouseenter事件就会被触发 //但是此时div#d上的mouseenter事件监听不会再被触发,因为没有冒泡上去 $('#d p').mouseenter(function(){ /*#d p,子元素,当mouseenter时背景变为黑色*/ $(this).css('background','#000'); });
まだ理解するのが難しいと思われるので、バブリングするマウスオーバーがどのようなものかを見てみましょう
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <script src="../script/jquery-2.1.3.min.js"></script> <script> $(function(){ /* $('#d'). mouseover(function(){ $(this).css('background','orange'); if(!$(this).data('data-count')){ $(this).data('data-count',1) }else{ $(this).data('data-count',$(this).data('data-count')+1); } $(this).find('span').text($(this).data('data-count')); }); $('#d p').mouseover(function(){ $(this).css('background','yellow'); if(!$(this).data('data-count')){ $(this).data('data-count',1) }else{ $(this).data('data-count',$(this).data('data-count')+1); } $(this).text($(this).data('data-count')); }); */ $('#d'). mouseenter(function(){ $(this).css('background','orange'); if(!$(this).data('data-count')){ $(this).data('data-count',1) }else{ $(this).data('data-count',$(this).data('data-count')+1); } $(this).find('span').text($(this).data('data-count')); }); $('#d p').mouseenter(function(){ $(this).css('background','yellow'); if(!$(this).data('data-count')){ $(this).data('data-count',1) }else{ $(this).data('data-count',$(this).data('data-count')+1); } $(this).text($(this).data('data-count')); }); }); </script> </head> <body> <div id="d" style="width:200px;height:200px;background-color: greenyellow"> <span>父元素</span> <p style="padding:5px;width:100px;height:100px;background-color: red;display:block">子元素</p> </div> </body> </html>
上記のコードを実行すると、マウスが子要素に入り、mouseover イベントがトリガーされるたびに、親要素にバブルアップし、親要素のmouseoverイベント監視を入力して実行します - 表示される数は増加します
ただし、mouseenterイベント監視に切り替えると、これは起こりません - 表示される数は増加しません
子要素のマウスオーバー イベント リスニング関数のリスクを防ぐため、Bubble -stopPropagation を実行すると、親要素のイベントはコールバックされません
以上がjQueryのmouseenterメソッドの非バブルを理解するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。