Hello stackoverflow用户,
我似乎有一些问题试图让我的下拉菜单工作,我很确定这是我的JavaScript无法正常工作。截至目前,根据我所拥有的内容 - 点击<li>
元素打开<ul>
菜单并保持活动状态时,您需要点击<li>
它关闭,活跃状态保持开启而不是像我需要的那样变得不活跃......所以我手边的问题是我哪里出错了?我仍然是javascript的新手,非常感谢任何帮助。
要求:
1。)点击激活并打开菜单
2。)再次单击元素或页面上的任何位置,菜单关闭并变为非活动状态。
这是我到目前为止所做的: DEMO
HTML:
<div class="top_l">
<li>Nav <span>▼</span>
<ul> <a href="#">Title</a>
<a href="#">Title</a>
<a href="#">Title</a>
</ul>
</li>
</div>
JS:
$(document).ready(function () {
$('.top_l li').click(function () {
$('.top_l li').addClass('active');
$('.top_l li ul').slideToggle();
});
});
CSS:
.top_l {
width: 340px;
height: 60px;
float: left;
}
.top_l li {
height: 32px;
padding: 8px 12px 0 12px;
margin: 10px 0 0 6px;
border: 1px solid transparent;
-moz-border-radius: 4px;
-webkit-border-radius: 4px;
border-radius: 4px;
float: left;
-moz-transition: all .3s ease;
-webkit-transition: all .3s ease;
-ms-transition: all .3s ease;
transition: all .3s ease;
list-style: none;
color: #A4A4A4;
font: 20px Arial, Helvetica, sans-serif;
font-weight: bold;
font-variant: small-caps;
text-shadow: 2px 2px 3px #000;
position: relative;
cursor: pointer;
}
.top_l li span {
font: 14px Arial, Helvetica, sans-serif;
}
.top_l li:hover, .top_l li.active {
color: #FFF;
border: 1px solid #444;
}
.top_l li ul {
width: 120px;
height: 120px;
background: #222;
border: 1px solid #444;
-moz-box-shadow: inset 0 0.1em 0.4em 0.1em #000;
-webkit-box-shadow: inset 0 0.1em 0.4em 0.1em #000;
box-shadow: inset 0 0.1em 0.4em 0.1em #000;
display: none;
position: absolute;
top: 22px;
left: 4px;
}
.top_l li ul a {
width: 118px;
height: 28px;
padding: 10px 0 0 0;
background: red;
float: left;
color: #FFF;
font: 14px Arial, Helvetica, sans-serif;
font-weight: bold;
font-variant: small-caps;
text-shadow: 1px 1px 1px #000, -2px -2px 2px #000;
}
答案 0 :(得分:1)
您永远不会在第二次点击时删除该课程。
检查.hasClass()
是否有效,如果是,请使用.removeClass()
将其删除。
$('.top_l li').click(function () {
if($(this).hasClass('active')) {
$(this).removeClass('active');
} else {
$(this).addClass('active');
}
$('.top_l li ul').slideToggle();
});
修改强>
请求的第二部分,用于在单击页面上的任意位置时关闭列表。试试这个:
$(document).ready(function () {
$('.top_l ul').click(function (e) {
$('.top_l ul').addClass('active');
$('.top_l ul li').slideToggle();
});
$(document).click(function() {
$('.top_l ul li').slideUp();
});
$('.top_l ul,.top_l li').click(function(e) {
e.stopPropagation();
});
});