jquery hover 이벤트가 버블링되는 것을 방지하는 방법
마우스가 각 div 위로 지나갈 때 div 배경색이 변경되는데, 포함된 div의 상위 div의 색상이 변경되는 것을 원하지 않습니다. 어떻게 해야 할까요?
버블사건이라고 들었는데 이해가 안가네요.
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script> <script type="text/javascript"> function div_hover(){ $("div").hover( function(){ $(this).addClass("hover"); }, function(){ $(this).removeClass("hover"); } ); } $(function(){ div_hover(); }); </script> <style type="text/css"> .box1{background:green;width:400px;height:400px;} .box2{background:yellow;width:300px;height:300px;} .box3{background:#cc3333;width:200px;height:200px;} .hover{background:#33cc33} </style> <div class="box1"> <div class="box2"> <div class="box3"></div> </div> </div>
$("div").hover( function(e){ $(this).addClass("hover"); e.stopPropagation(); //这里 }, function(e){ $(this).removeClass("hover"); e.stopPropagation(); //这里 } );
e.stopPropagation();을 전달해야 한다는 점에 유의하세요. 직접 넣으면 아무런 효과가 없나요? 2층에서 런닝버전을 드리는 걸 깜빡하셨나요?
결과가 나왔는데 너무 복잡해요
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script> <script type="text/javascript"> function div_hover(){ var levels = {}; var min = 100, max = 0; var change = function() { var q = 0; for (var p in levels) { $(levels[p]).removeClass("hover"); q = Math.max(q, p); } $(levels[q]).addClass("hover"); }; var getLevel = function(element) { var level = 0; for (var parent = element; parent.parentNode; parent = parent.parentNode) level++; return level; }; $("div").hover( function(){ levels[getLevel(this)] = this; change(); }, function(){ delete levels[getLevel(this)]; $(this).removeClass("hover"); change(); } ); } $(function(){ div_hover(); }); </script> <style type="text/css"> .box1{background:green;width:400px;height:400px;} .box2{background:yellow;width:300px;height:300px;} .box3{background:#cc3333;width:200px;height:200px;} .hover{background:#33cc33} </style> <div class="box1"> <div class="box2"> <div class="box3"></div> </div> </div>
호버 이벤트를 사용하지 않았지만 효과는 동일합니다.
<!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> <title></title> <style type="text/css"> .box1{background:green;width:400px;height:400px;} .box2{background:yellow;width:300px;height:300px;} .box3{background:#cc3333;width:200px;height:200px;} .hover{background:#33cc33} </style> <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script> <script type="text/javascript"> $(function() { $("div").mouseover(function(e) { $(this).addClass("hover"); e.stopPropagation(); }); $("div").mouseout(function(e) { $(this).removeClass("hover"); e.stopPropagation(); }); }); </script> </head> <body> <div class="box1"> <div class="box2"> <div class="box3"></div> </div> </div> </body> </html>
하하, 세 가지 효과가 다릅니다. 흥미로운.
위 내용은 jquery: 호버 이벤트가 버블링되지 않는 이유는 무엇인가요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!