2010-06-11 72 views
1

我想創建一個下拉列表。我有工作,但不完全,使用此代碼:下拉問題

$(document).ready(function(){ 
    $("#zone-bar li em").hover(function() { 
     var hidden = $(this).parents("li").children("ul").is(":hidden"); 

     $("#zone-bar>ul>li>ul").hide()   
     $("#zone-bar>ul>li>a").removeClass(); 

     if (hidden) { 
      $(this).parents("li").children("ul").toggle() 
        .parents("li").children("a").addClass("zoneCur"); 
     } 
    }); 
}); 

我設法使它工作等等徘徊在下拉列表中會出現,但是當你移動選擇從下拉列表中的項目之一下拉列表關閉。我如何解決這個問題?

它的作品如果我把它放到onclick,但你必須點擊箭頭再次關閉它。你可以看到(目前使用onclick

回答

0

嘗試把懸停在

#zone-bar li 

,而不是在EM

更新,是的,你需要修改腳本在http://doctorwhohd.com一個活生生的例子:

$("#zone-bar li").hover(function() { 
    var hidden = $(this).children("ul").is(":hidden"); 

    $("#zone-bar>ul>li>ul").hide()   
    $("#zone-bar>ul>li>a").removeClass(); 

    if (hidden) { 
     $(this).children("ul").toggle() 
       .children("a").addClass("zoneCur"); 
    } 

});

但是,使用mouseenter的建議可能是優越的,似乎這會導致瞬間閃爍。

你可能想考慮用純CSS做這個,沒有明顯的理由來使用jquery來創建這種效果。

#zone-bar li{ height:1em; overflow:hidden}; 
#zone-bar li:hover{ height:auto}; 
+0

當我使用當我在它懸停它目前被留在.hover所以你可以看到它是什麼 – cameronmarklewis 2010-06-11 18:45:59

1

這很可能是這樣的行爲,因爲hover()旨在承擔2個功能。一個用於mouseenter,另一個用於mouseleave

當你只給它一個,我認爲它觸發了這兩個事件。

而不是hover(),使用mouseenter()

$("#zone-bar li em").mouseenter(function() { 
    var hidden = $(this).parents("li").children("ul").is(":hidden"); 

    $("#zone-bar>ul>li>ul").hide()   
    $("#zone-bar>ul>li>a").removeClass(); 

    if (hidden) { 
     $(this).parents("li").children("ul").toggle() 
       .parents("li").children("a").addClass("zoneCur"); 
    } 
}); 
+0

感謝狀與EM這什麼也沒有發生,你爲它的偉大工程一兩件事會是當鼠標移出下拉菜單時它會消失,因爲當鼠標離開下拉框時,菜單仍然保留 – cameronmarklewis 2010-06-11 19:48:39

+0

嘗試在'$(「#區域放置一個'.mouseleave'處理程序-bar> ul> li> ul「)'讓'hidelele'時隱藏。或者,將每個菜單組合包裝在一個容器中,並在該容器上放置一個「hover()」事件(同時具有所需的處理函數)。這樣'hover()'的'mouseleave'部分只會在離開容器時觸發。 – user113716 2010-06-11 20:09:22

+0

非常感謝你的第一個想法很好,我使用了.mouseleave,它工作的很棒!謝謝你的時間。 – cameronmarklewis 2010-06-11 21:38:08