我正在学习Jquery,我似乎无法在这个基本代码中解决我的错误。目标是当用户将鼠标悬停在“菜单项2”上时显示下拉菜单。请有人帮我看看我的错误。如果以下代码无法正确显示,则以下是代码的链接:http://www.door9.co.uk/nav.html
<style>
ul {list-style : none; padding : 0; width: 100%; }
ul li {display: inline;}
li {display : inline; margin-right : 20px; }
li ul {display : none; }
li:hover ul {display : block; width: 145px; position: relative; left: 160px; }
</style>
<body>
<div>
<ul>
<li>Main list item one</li>
<li>Main list item two ↓
<ul>
<li>Sub list item one</li>
<li>Sub list item two</li>
<li>Sub list item three</li>
</ul>
</li>
<li>Main list item three</li>
<li>Main list item four</li>
</ul><!-- UL close -->
</div>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1 jquery.min.js"></script>
<script>
$(document).ready(function(){
$('li').has('ul').hover(function(){
$('li ul').slideToggle(function(){
$('li ul').slideToggle();
});
});
});
</script>
</body>
答案 0 :(得分:1)
1)jQuery hover方法有两个参数,mouseenter事件处理程序和mouseleave事件处理程序。 (你只有一个)
2)您似乎正在选择处理程序中的所有子菜单。很可能你只想要你正在盘旋的项目中的那个。
这可能更接近你想要实现的目标:
$("li").has("ul").hover(function () {
$(this).find("ul").slideDown();
}, function () {
$(this).find("ul").slideUp();
});
答案 1 :(得分:1)
该行
li:hover ul {display : block; width: 145px; position: relative; left: 160px; }
你的CSS中的可能会干扰。
下面的代码可以是你想要的吗?
<html>
<head>
<style>
ul { list-style: none; padding: 0; width: 100%; }
ul li { display: inline; }
li { display: inline; margin-right: 20px; }
li ul { display: none; }
</style>
</head>
<body>
<ul>
<li>Main list item one</li>
<li>Main list item two ↓
<ul>
<li>Sub list item one</li>
<li>Sub list item two</li>
<li>Sub list item three</li>
</ul>
<li>Main list item three</li>
<li>Main list item four</li>
</ul>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script>
$('li').has('ul').hover(function() {
$(this).children('ul').slideToggle();
});
</script>
</body>
</html>
如果要为li>ul
设置样式,您可以将样式写入li ul
选择器(而不是li:hover ul
),然后在文档中使用hide()
负载。当您的查看器关闭JavaScript或不可用时,这也是一种很好的做法(因为在目前的情况下,li>ul
从未显示JavaScript是否已关闭)。
此外,选择器li
和ul li
似乎多余,但我离题了......