【问题标题】:closing the submenu on clicking the next menu单击下一个菜单时关闭子菜单
【发布时间】:2013-09-26 12:08:34
【问题描述】:

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

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

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

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

请帮忙。

我创建的示例菜单:-

【问题讨论】:

  • 你想打开菜单 1,然后菜单 2 必须隐藏,反之亦然?

标签: javascript html menubar


【解决方案1】:

如果您有超过 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 - 它会简化很多事情。

附:你也可以考虑重构你的代码:

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

  2. 在声明局部变量时使用 varexplanation

【讨论】:

    【解决方案2】:

    如果你想打开菜单 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>
    

    【讨论】:

      【解决方案3】:

      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>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-07-13
        • 2014-07-31
        • 2017-07-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多