菜单项打不开
Menu item doesn't open
我找到了一个简单的下拉菜单,对我来说效果很好,但只有子项目链接打开。
当我单击 'Home' 时没有任何反应(它应该打开 google 页面),当我单击 'info2' 时 google 将打开。
我认为它与 de.js 文件有关,但我只是没看到它。
希望有人能用一个简单的技巧来帮助我。
$(document).ready(function(){
$("#nav > li > a").on("click", function(e){
if($(this).parent().has("ul")) {
e.preventDefault();
}
if(!$(this).hasClass("open")) {
// hide any open menus and remove all other classes
$("#nav li ul").slideUp(350);
$("#nav li a").removeClass("open");
// open our new menu and add the open class
$(this).next("ul").slideDown(350);
$(this).addClass("open");
}
else if($(this).hasClass("open")) {
$(this).removeClass("open");
$(this).next("ul").slideUp(350);
}
});
});
ul, li, td {
padding: 0;
border: 0;
vertical-align: baseline;
outline: none;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
ol, ul { list-style: none; }
table { border-collapse: collapse; border-spacing: 0; }
/* nav menu styles */
#nav {
display: block;
width: 280px;
margin: 0 auto;
}
#nav li {font-size:19px; text-align:center;}
#nav > li > a {
display: block;
padding: 16px 18px;
color: #fff;
text-decoration: none;
border-bottom: 1px solid #212121;
background-color: #0069b3;
}
#nav > li > a:hover, #nav > li > a.open {
color: #fff;
border-bottom-color: #384f76;
background-color: #083562;
}
#nav li ul { display: none; background: #083562; }
#nav li ul li a {
display: block;
background: none;
padding: 10px 0px;
text-decoration: none;
color: #fff;
}
#nav li ul li a:hover {
background: #014f86;
}
<!doctype html>
<html lang="en-US">
<head>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
</head>
<body>
<div id="w">
<nav>
<ul id="nav">
<li><a href="http://www.google.com">Home</a></li>
<li><a href="#">Info</a>
<ul>
<li><a href="#">info2</a></li>
<li><a href="#">info3</a></li>
</ul>
</li>
</nav>
</div>
</body>
</html>
看起来 .has() 方法不能以这种方式使用,因为不是 return 布尔值,而是 jQuery 对象。改变这个:
if($(this).parent().has("ul")) {
e.preventDefault();
}
对此,如果对您有帮助,请告诉我:
if($(this).parent().has("ul").length === 1) {
e.preventDefault();
}
我找到了一个简单的下拉菜单,对我来说效果很好,但只有子项目链接打开。 当我单击 'Home' 时没有任何反应(它应该打开 google 页面),当我单击 'info2' 时 google 将打开。
我认为它与 de.js 文件有关,但我只是没看到它。 希望有人能用一个简单的技巧来帮助我。
$(document).ready(function(){
$("#nav > li > a").on("click", function(e){
if($(this).parent().has("ul")) {
e.preventDefault();
}
if(!$(this).hasClass("open")) {
// hide any open menus and remove all other classes
$("#nav li ul").slideUp(350);
$("#nav li a").removeClass("open");
// open our new menu and add the open class
$(this).next("ul").slideDown(350);
$(this).addClass("open");
}
else if($(this).hasClass("open")) {
$(this).removeClass("open");
$(this).next("ul").slideUp(350);
}
});
});
ul, li, td {
padding: 0;
border: 0;
vertical-align: baseline;
outline: none;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
ol, ul { list-style: none; }
table { border-collapse: collapse; border-spacing: 0; }
/* nav menu styles */
#nav {
display: block;
width: 280px;
margin: 0 auto;
}
#nav li {font-size:19px; text-align:center;}
#nav > li > a {
display: block;
padding: 16px 18px;
color: #fff;
text-decoration: none;
border-bottom: 1px solid #212121;
background-color: #0069b3;
}
#nav > li > a:hover, #nav > li > a.open {
color: #fff;
border-bottom-color: #384f76;
background-color: #083562;
}
#nav li ul { display: none; background: #083562; }
#nav li ul li a {
display: block;
background: none;
padding: 10px 0px;
text-decoration: none;
color: #fff;
}
#nav li ul li a:hover {
background: #014f86;
}
<!doctype html>
<html lang="en-US">
<head>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
</head>
<body>
<div id="w">
<nav>
<ul id="nav">
<li><a href="http://www.google.com">Home</a></li>
<li><a href="#">Info</a>
<ul>
<li><a href="#">info2</a></li>
<li><a href="#">info3</a></li>
</ul>
</li>
</nav>
</div>
</body>
</html>
看起来 .has() 方法不能以这种方式使用,因为不是 return 布尔值,而是 jQuery 对象。改变这个:
if($(this).parent().has("ul")) {
e.preventDefault();
}
对此,如果对您有帮助,请告诉我:
if($(this).parent().has("ul").length === 1) {
e.preventDefault();
}