2012-06-06 38 views
4

我想創建一個簡單的邊欄爲我的網站使用jquery,我有一些麻煩與它的懸停功能。當用戶懸停在某個類別上時,會出現一個子菜單。如果上面或下面的類別被徘徊,我希望子菜單關閉。我創建了一個jsFiddle來幫助顯示我的問題以及子菜單如何不像應該那樣關閉。我一直試圖弄清楚這幾個小時,我非常感謝任何幫助。側邊欄子菜單元素沒有顯示/隱藏,因爲他們應該

http://jsfiddle.net/BGcDc/7/

謝謝。

回答

3

你忘了在mouseleave函數中隱藏你的子部分。只需添加$(this).find(".submenu").hide();到現有的處理程序:

$(".category").mouseleave(function() { 
    $(this).find(".submenu").hide(); 
    $(this).css("background-color", "#eee"); 
    $(this).css("border", "1px solid grey"); 
    $(this).css("border-bottom", "none"); 
    $(this).css("width", "180px"); 
    $(".category:last").css("border-bottom", "1px solid grey"); 
}); 
+1

完美!這正是我需要的!謝謝! – AnchovyLegend

+1

@MHZ如果這是你想要的,而不是將此問題標記爲正確。 – khurram

1

你忘了隱藏表格

$(".category").mouseleave(function() { 

    $(this).find(".submenu").hide(); 

}) 

http://jsfiddle.net/BGcDc/10/

不過這可以通過CSS只能由麪糰被acomplished ..:

.category .submenu{ display:none} 
.category:hover .submenu{ display:block} 

而你的所有.css()邊界的corse() S比的意義,它,如果你想使一個跨瀏覽器的動畫顯示/隱藏將可能是有意義的)

1

只需修改JavaScript像這樣:

$(".category").mouseleave(function() { 
    // add this 
    $(".submenu").hide(); 
    $(this).css("background-color", "#eee"); 
    $(this).css("border", "1px solid grey"); 
    $(this).css("border-bottom", "none"); 
    $(this).css("width", "180px"); 
    $(".category:last").css("border-bottom", "1px solid grey"); 
}); 
1

.hover() jQuery的方法接受2個參數,您可以在第二個參數中使用匿名函數對象來隱藏子菜單,與您在第一個參數的函數中顯示它的方式類似。

Fiddle

mouseleave也是不必要的,如果你已經有了一個.hover監聽器連接到的元素。這也更簡單,更易於閱讀。

Fiddle