2013-03-09 139 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