单击子菜单时必须保持打开状态
submenu on click must remain open
我有一个带有一些子菜单项的垂直菜单,这个子菜单在点击时打开。但问题是,当我单击其中一个子菜单项时,子菜单关闭,而我希望它保持打开状态,因为当我浏览子菜单项时这是html:
<div class="ul_container">
<ul class="mainnav" id="nav" style="list-style:none;">
<li><a id="active" href="index.html"><strong>HOME</strong></a></li>
<li><a href="javascript:void(0)" onclick="toggleID('sub1')">COLLECTIONS</a>
<ul class="subnav" id="sub1" style="display:none">
<li class="first"><a href="Collections_PE_13.html">spring/summer 2013</a>
<li class="first"><a href="Collections_AI_13.html">autumn/winter 2013</a>
<li class="first"><a href="Collections_AI_12.html">autumn/winter 2012</a>
<li class="first"><a href="Collections.html">autumn/winter 2011</a>
</ul>
</li>
<li><a href="Portrait.html">PORTRAIT</a></li>
<li><a href="Heritage.html">HERITAGE</a></li>
<li><a href="Press.html">PRESS</a></li>
<li><a href="Contacts.html">CONTACTS</a></li>
</ul>
</div>
和js
function toggleID(IDS) {
var sel = document.getElementById('nav').getElementsByTagName('ul');
for (var i=0; i<sel.length; i++) {
if (sel[i].id != IDS) { sel[i].style.display = 'none'; }
}
sel = document.getElementById(IDS);
sel.style.display = (sel.style.display != 'block') ? 'block' : 'none';
}
<div class="ul_container">
<ul class="mainnav" id="nav" style="list-style:none;">
<li><a id="active" href="#"><strong>HOME</strong></a></li>
<li><a href="javascript:void(0)" id="test" onclick="toggleID('sub1');">COLLECTIONS</a>
<ul class="subnav" id="sub1" style="display:none">
<li class="first"><a href="#">spring/summer 2013</a></li>
<li class="first"><a href="#">autumn/winter 2013</a></li>
<li class="first"><a href="#">autumn/winter 2012</a></li>
<li class="first"><a href="#">autumn/winter 2011</a></li>
</ul>
</li>
<li><a href="#">PORTRAIT</a></li>
<li><a href="#">HERITAGE</a></li>
<li><a href="#">PRESS</a></li>
<li><a href="#">CONTACTS</a></li>
</ul>
$("#test").click(function() {
var sel = document.getElementById('nav').getElementsByTagName('ul');
for (var i = 0; i < sel.length; i++) {
if (sel[i].id != 'sub1') {
sel[i].style.display = 'none';
}
}
sel = document.getElementById('sub1');
sel.style.display = (sel.style.display != 'block') ? 'block' : 'none';
});
工作示例是你的问题,你需要记住的可见状态的子菜单,一旦你点击子项?
如果是,您需要记住子菜单的状态。您可以使用cookie或本地存储来实现这一点。
Html(只是小的改变,像删除onclick和修复Html)
<div class="ul_container">
<ul class="mainnav" id="nav" style="list-style:none;">
<li><a id="active" href="index.html"><strong>HOME</strong></a></li>
<li><a href="javascript:void(0)">COLLECTIONS</a>
<ul class="subnav" id="sub1">
<li class="first"><a href="Collections_PE_13.html">spring/summer 2013</a></li>
<li class="first"><a href="Collections_AI_13.html">autumn/winter 2013</a></li>
<li class="first"><a href="Collections_AI_12.html">autumn/winter 2012</a></li>
<li class="first"><a href="Collections.html">autumn/winter 2011</a></li>
</ul>
</li>
<li><a href="Portrait.html">PORTRAIT</a></li>
<li><a href="Heritage.html">HERITAGE</a></li>
<li><a href="Press.html">PRESS</a></li>
<li><a href="Contacts.html">CONTACTS</a></li>
</ul>
</div>
Javascript(使用jquery与localstorage)
if(localStorage.getItem("state") == "closed") // <-- this checks closed/open state and sets subnav accordingly
$('.subnav').hide();
$('.subnav').parent().click(function () {
$(this).find('#sub1').toggle(); //<-- This toggles the menu open/close
// ** Remeber state ** //
if (localStorage.getItem("state") == "open") {
localStorage.setItem("state", "closed"); // <-- this remembers "open" after user navigates
} else {
localStorage.setItem("state", "open"); // <-- this remembers "open" after user navigates
}
// ** Remeber state ** //
});
我的例子使用jquery,如果你有可能开始使用它,你应该这样做。你可以使用jquery
用几行代码替换大部分javascript代码。在这里查看工作小提琴
http://jsfiddle.net/urbanbjorkman/jGwnz/Urban Bjorkman,我使用你的代码,但有些地方是错误的…对吗?
<html>
<head>
<script type="text/javascript" >
if (localStorage.getItem("state") == "closed") // <-- this checks closed/open state and sets subnav accordingly
$('.subnav').hide();
$('.subnav').parent().click(function () {
$(this).find('#sub1').toggle(); //<-- This toggles the menu open/close
// ** Block to remeber state ** //
if (localStorage.getItem("state") == "open") {
localStorage.setItem("state", "closed"); // <-- this remembers "open" after user navigates
} else {
localStorage.setItem("state", "open"); // <-- this remembers "open" after user navigates
}
// ** Block to remeber state ** //
});
</script>
</head>
<body>
<div class="ul_container">
<ul class="mainnav" id="nav" style="list-style:none;">
<li><a id="active" href="index.html"><strong>HOME</strong></a>
</li>
<li><a href="javascript:void(0)">COLLECTIONS</a>
<ul class="subnav" id="sub1">
<li class="first"><a href="Collections_PE_13.html">spring/summer 2013</a>
</li>
<li class="first"><a href="Collections_AI_13.html">autumn/winter 2013</a>
</li>
<li class="first"><a href="Collections_AI_12.html">autumn/winter 2012</a>
</li>
<li class="first"><a href="Collections.html">autumn/winter 2011</a>
</li>
</ul>
</li>
<li><a href="Portrait.html">PORTRAIT</a>
</li>
<li><a href="Heritage.html">HERITAGE</a>
</li>
<li><a href="Press.html">PRESS</a>
</li>
<li><a href="Contacts.html">CONTACTS</a>
</li>
</ul>
</div>
</body>
</html>
相关文章:
- 悬停下拉菜单即使在鼠标移出后也保持活动状态
- Dojo菜单栏选定状态
- Dojo栏菜单在选定状态下堆叠
- WordPress切换菜单 - 使菜单在当前页面上保持打开状态
- 如果其中一个子菜单项处于活动状态,则展开下拉菜单
- 悬停样式应该在动态加载多级菜单时保持单击状态
- 当子菜单的父级或包含链接处于活动状态时,如何告知子菜单可见
- Javascript在悬停状态下制作下拉菜单 - 没有HTML中的硬编码
- 如何使用 JavaScript 保存菜单状态
- 菜单悬停状态
- 下拉菜单不想保持打开状态
- 当目标处于顶部滚动状态时,如何从菜单中激活项目
- Jquery 无法返回到动画菜单列表上的活动状态
- JavaScript 下拉菜单在单击时处于活动状态,在外部单击时不活动
- 使 Ext js 菜单保持打开状态
- 使悬停状态在悬停在子菜单项上时保持不变
- 如果菜单处于活动状态或非活动状态,则切换图标的类.多级按钮菜单
- 当用户单击子菜单并在新页面中打开时,子菜单将保持活动状态
- 页面重新加载后保持菜单切换状态
- 活动状态菜单 JavaScript