2013-03-09 137 views
0

我很新,試圖瞭解JavaScript,我一直在試圖找出我做錯了什麼,但無法讓這個工作正常的多個例子。有一次我使用onmouseover/mouseout,但它只能在1個菜單上工作。JavaScript懸停功能的子菜單

我敢肯定,這是簡單的,我忽略了,但任何幫助,將不勝感激。

http://jsfiddle.net/N3TyT/

jQuery(document).ready(function($) { 
$('#top-menu').hover(
    function() { 
    $('#submenu').show(active); 
    }, 
    function() { 
    $('#submenu').hide(non-active); 
    } 
); 
}); 

<ul id="menu" class="nav-menu"> 
    <li>Home</li> 
    <li id="top-menu"><a href="#">About Us</a> 
    </li> 
    <ul id="submenu" class="sub-menu non-active"> 
     <li>US</li> 
     <li>Our Style</li> 
     <li>The Experience</li> 
    </ul> 
    <li id="top-menu"><a href="#">Galleries</a> 
    </li> 
    <ul id="submenu" class="sub-menu non-active"> 
     <li>Weddings</li> 
     <li>Engagements</li> 
     <li>Featured Weddings</li> 
    </ul> 
    <li id="top-menu"><a href="#">The Details</a> 
    </li> 
    <ul id="submenu" class="sub-menu non-active"> 
     <li>Investment</li> 
     <li>Press and Awards</li> 
     <li>Testimonials</li> 
    </ul> 
    <li>FAQ</li> 
    <li>Contact</li> 
    <li>The Blog</li> 
</ul> 

.nav-menu { 
    list-style-type:none; 
    text-align:center; 
    text-transform:uppercase; 
    font-weight:bold; 
    font: 24px'Playfair Display', Georgia, serif; 
} 
.navmenu ul li { 
    margin:30px; 
} 
.non-active { 
    display:none; 
} 
.active { 
    display:inline; 
} 
+0

第一步,檢查控制檯錯誤。 – elclanrs 2013-03-09 08:54:42

+2

請您簡要告訴我們您想實現的目標嗎? – 2013-03-09 08:56:55

回答

1

id必須唯一。如果你有多個元素使用相同的id,那麼當你執行$('#top-menu')時,jquery將不會檢索所有元素,它只會找到匹配選擇器的第一個元素。

-1

我更新了你的工作。這是什麼試圖建立?

$('#top-menu').mouseover(function(){ 
    $('#submenu').addClass('active'); 
}); 
$('#top-menu').mouseout(function(){ 
    $('#submenu').removeClass('active'); 
}); 

JSFiddle Demo

+0

謝謝,這是我需要的解決方案。其他人工作,但我最終希望菜單的高度保持不變,即使下拉菜單被激活,所以我需要一個代碼來讓我修改這個類。瞭解我只需要確保獨特的ID在整個工作。謝謝 – user2151084 2013-03-09 09:15:46

+0

(-1)代碼在第一個下拉菜單後不起作用,並且答案需要格式化。請查看格式指南。我更新了帖子以顯示正確的格式。 – FakeRainBrigand 2013-03-09 09:19:29

2

它不會回答你的具體問題,但可以用CSS來輕鬆實現相同的行爲。這樣你就不會依賴JavaScript來打開標準的菜單訪問。

http://jsfiddle.net/EmcPY

HTML

<ul class="menu"> 
    <li><a href="#">Home</a></li> 
    <li> 
     <a href="#">Galleries</a> 

     <ul> 
      <li>Gallery #1</li> 
      <li>Gallery #2</li> 
     </ul> 
    </li> 
    <li> 
     <a href="#">Albums</a> 

     <ul> 
      <li>Album #1</li> 
      <li>Album #2</li> 
     </ul> 
    </li> 
</ul> 

CSS

ul.menu li ul { 
    display:none; 
} 

ul.menu li:hover ul { 
    display:block; 
    position:relative; 
} 
+0

好的提到。投入一些CSS3-Transitions獲得額外獎勵積分:-) – FakeRainBrigand 2013-03-09 09:22:23

0

我們將需要更改HTML一點。 ID僅在頁面上使用一次。類是相似的,但可以應用於任何數量的元素。我們也想在頂層菜單下嵌套我們的子菜單。這樣的協會更清晰。

<li class="top-menu"><a href="#">About Us</a> 
    <ul class="sub-menu non-active"> 
     <li>Ashley + David</li> 
     <li>Our Style</li> 
     <li>The Experience</li> 
    </ul> 
</li> 

我們想指定要顯示或隱藏的嵌套子菜單。 $(this)指的是懸停的頂層菜單。

$('.top-menu').hover(
    function() { 
    $(this).find('.sub-menu').show("slow"); 
    }, 
    function() { 
    $(this).find('.sub-menu').hide("slow"); 
    } 
); 

demo

+0

這增加了不必要的動畫,並且下拉結果因爲消失而不可點擊。 – user2151084 2013-03-09 09:29:49

+0

@ user2151084,謝謝。我注意到有東西沒有了。現在通過嵌套元素和稍微改變jQuery的使用情況來解決這個問題。 – FakeRainBrigand 2013-03-09 09:37:13