单击下一个菜单关闭子菜单

时间:2013-09-26 12:08:35

标签: javascript html menubar

我有以下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>

但是,只需点击一下,就会出现一个子菜单,再次点击它会隐藏它。

当我们点击下一个菜单时,我需要隐藏子菜单。只有一个菜单应打开其中的子菜单。

现在,我可以打开两个菜单,其中有子菜单,只有点击菜单,才能隐藏它们。

请帮忙。

我创建的示例菜单: -

enter image description here

3 个答案:

答案 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。您也可以考虑重构代码:

  1. 现在不需要为 script 标记使用 language 属性。 it's obsolete

  2. 声明局部变量时,
  3. 使用 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>