2011-01-12 65 views
0

晚安:我想將鼠標移過​​顯示#panel,然後點擊.close顯示#panel,誰能糾正我的代碼?謝謝。請更正我的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> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
<script type="text/javascript" src="jquery-1.4.2.min.js"></script> 
<script type="text/javascript"> 
$(document).ready(function(){ 
    $(".slide").mouseover(function(){ 
     $("#panel").slideToggle("slow"); 
    }); 
    $(".close").click(function(){ 
     $("#panel").slideToggle("slow"); 
    });  
}); 
</script> 
<style type="text/css"> 
body { 
    margin: 0 auto; 
    padding: 0; 
    width: 1024px; 
    height:100%; 
} 
#wrap {position:absolute;bottom:0px;} 
#panel { 
    background: #f60; 
    width:600px; 
    height: 200px; 
    display: none; 
} 
.slide { 
    width:600px; 
    height: 20px; 
    background-color:#F06; 
} 
.close{float:right;height:20px;width:20px;background-color:#000;} 
</style> 
</head> 
<body> 
<div id="wrap"> 
<div class="slide">&nbsp;<div class="close">&nbsp;</div></div> 
<div id="panel"> 
    <!-- some content --> 
</div> 
</div> 
</body> 
</html> 

回答

4

我不認爲你應該在這種情況下使用slideToggle,因爲它似乎並不像​​和.close是不斷隱藏

$(".slide").mouseover(function(){ 
    $("#panel").slideDown("slow"); 
}); 
$(".close").click(function(){ 
    $("#panel").slideUp("slow"); 
}); 

而且,這不會工作,直到你移動.close DIV進入#panel因爲.close是​​一個孩子,當您嘗試單擊.close

<div id="wrap"> 
    <div class="slide">&nbsp;</div> 
    <div id="panel"> 
     <div class="close">&nbsp;</div> 
     <!-- some content --> 
    </div> 
</div> 
將觸發​​ moveover事件10

一個例子:http://jsfiddle.net/MAYag/

+0

我使用錯誤的`slideToggle`,非常感謝。 – cj333 2011-01-12 19:55:06

1

IIRC,當鼠標移動到元素內時,mouseover將繼續觸發。我相信你的代碼會導致很多閃爍,因爲#面板不斷切換。也許你想使用mouseenter事件?

+0

實際上,它沒有。從文檔中:「當鼠標指針進入元素時,鼠標懸停事件發送到元素,任何HTML元素都可以接收此事件。」 – 2011-01-12 19:51:15

0

你的問題是由於div.close是內部div#slide,這使得鼠標懸停事件火接近過。