我有以下javascript: -
<script language="javascript" type="text/javascript">
function HideandUNhideObj(ThisObj){
nav=document.getElementById(ThisObj).style
if(nav.display=="none"){
nav.display='block';
}else{
nav.display='none';
}
}
</script>
我有以下菜单和子菜单的HTML代码
<ul>
<li><a href="#" onclick="HideandUNhideObj('div1');">Menu 1</a>
<div style="display: none;" id="div1">
<ul>
<li><a href="#">Submenu 1</a></li>
<li><a href="#">Submenu 2</a></li>
<li><a href="#">Submenu 3</a></li>
<li><a href="#">Submenu 4</a></li>
</ul>
</div>
</li>
</ul>
<ul>
<li><a href="#" onclick="HideandUNhideObj('div2');">Menu 2</a>
<div style="display: none;" id="div2">
<ul>
<li><a href="#">Submenu 1</a></li>
<li><a href="#">Submenu 2</a></li>
<li><a href="#">Submenu 3</a></li>
<li><a href="#">Submenu 4</a></li>
</ul>
</div>
</li>
</ul>
但是,只需点击一下,就会出现一个子菜单,再次点击它会隐藏它。
当我们点击下一个菜单时,我需要隐藏子菜单。只有一个菜单应打开其中的子菜单。
现在,我可以打开两个菜单,其中有子菜单,只有点击菜单,才能隐藏它们。
请帮忙。
我创建的示例菜单: -
答案 0 :(得分:2)
如果你有超过2个子菜单,@ Ashish的答案不是很容易扩展。
我在你的代码中玩了一些机智,得到了类似http://jsfiddle.net/LfAbb/的内容:
function HideandUNhideObj(submenuId){
hideAllSubmenus();
showSubmenu(submenuId);
}
function hideAllSubmenus() {
var submenus = document.getElementsByClassName("submenu");
for (var i = 0; i < submenus.length; ++i) {
var submenu = submenus[i];
hideSubmenu(submenu);
}
}
function hideSubmenu(elem) {
elem.style.display = "none";
}
function showSubmenu(submenuId) {
document.getElementById(submenuId).style.display = "block";
}
我更改了处理程序,因此首先关闭所有子菜单,然后打开必要的子菜单。 还可以考虑使用jQuery或类似的库,如果你在你的应用程序中使用JS很多 - 它会简化很多事情。
P.S。您也可以考虑重构代码:
现在不需要为 script 标记使用 language 属性。 it's obsolete
使用 var 。 explanation
答案 1 :(得分:1)
如果你想要菜单1打开,那么Menu2必须隐藏,反之亦然
<script language="javascript" type="text/javascript">
//<![CDATA[
function HideandUNhideObj(ThisObj){
if(ThisObj == "div1")
{
var div = "div2";
}
else
{
var div = "div1";
}
nav=document.getElementById(ThisObj).style;
if(nav.display=="none"){
nav.display='block';
document.getElementById(div).style.display = "none";
}else{
nav.display='none';
document.getElementById(div).style.display = "block";
}
}
//]]>
</script>
答案 2 :(得分:1)
JAVA SCRIPT in:
<script type="text/javascript" src="http://code.jquery.com/jquery-1.9.1.js"></script>
<script type="text/javascript">
function hide(i)
{
var elements = document.getElementsByClassName('subMenu');
for(var k = 0; k < elements.length; k++){
elements[k].style.display = 'none'; // Hide all elements.
}
$(i).show();
}
</script>
HTML in:
<ul>
<li><div>
<a href="#" class="menu" onclick="hide(sub1);">Menu 1</a>
<ul id="sub1" class="subMenu">
<li><a href="#">Submenu 1</a></li>
<li><a href="#">Submenu 2</a></li>
<li><a href="#">Submenu 3</a></li>
<li><a href="#">Submenu 4</a></li>
</ul>
</div>
</li>
</ul>
<ul>
<li><div>
<a href="#" class="menu" onclick="hide(sub2)">Menu 2</a>
<ul id="sub2" class="subMenu">
<li><a href="#">Submenu 1</a></li>
<li><a href="#">Submenu 2</a></li>
<li><a href="#">Submenu 3</a></li>
<li><a href="#">Submenu 4</a></li>
</ul>
</div>
</li>
</ul>