0

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

但是单击一下会出现一个子菜单,然后再次单击它会隐藏它。

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

现在,我可以打开两个菜单,其中包含子菜单,并且仅在单击菜单时会隐藏这些菜单。

请帮忙。

我创建的示例菜单:-

在此处输入图像描述

4

3 回答 3

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 - 它会简化很多事情。

PS您也可以考虑重构您的代码:

  1. 现在没有必要为脚本标签使用语言属性。它已经过时了

  2. 声明局部变量时使用var 。解释

于 2013-09-26T12:48:01.680 回答
1

如果你想打开菜单 1,那么菜单 2 必须隐藏,反之亦然

   <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>
于 2013-09-26T12:19:46.387 回答
1

中的 JAVA 脚本:

<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:

<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>
于 2013-09-26T13:07:47.337 回答