简体   繁体   English

单击第二个父菜单时,显示其子菜单并隐藏先前单击的父菜单的子菜单

[英]when second parent menu is clicked show its submenu and hide the submenu of previously clicked parent menu

I have a vertical menu with submenus and I want to show the submenu only if the parent was clicked ,showing only one submenu at a time. 我有一个带有子菜单的垂直菜单,我想仅在单击父级时显示该子菜单,一次仅显示一个子菜单。 But the thing is when other parent menu is clicked its submenu is shown BUT the previous submenu also is seen. 但问题是,当单击其他父菜单时,其子菜单显示出来,但也可以看到先前的子菜单。 How do i hide the previous submenu?? 如何隐藏上一个子菜单? please help . 请帮忙 。 I am new to javascript. 我是javascript新手。 Here is my html-css-javascript code. 这是我的html-css-javascript代码。

<div class="menu">
<ul >


  <li><a href="#" onclick= "Myfunction('cert')">Contacts</a>
   <div style="display: none;" id="cert">
           <ul >
                <li >Submenu 1</li>                                     
                <li>submenu 2</li>
           </ul>
    </div>
   </li>

  <li><a href="#"  onclick="Myfunction('defect')">About</a>
  <div style="display: none;" id="defect">
        <ul >
          <li>menu 1</li>
          <li>menu 2</li>
      </ul>
  </div>
  </li>

</ul>

script 脚本

function Myfunction(obj) { 
     var ele=document.getElementById(obj).style; 
         if(ele.display=="none") { 
            ele.display="block"; 
         } else { ele.display="none"; } 
} 

The easiest way will be using a global JavaScript variable, although it's not very elegant. 最简单的方法是使用全局JavaScript变量,尽管它不是很优雅。 Since you're not using any JavaScript libraries like eg jQuery everything else will turn into a pile of DOM-traversing spaghetti code. 由于您没有使用任何JavaScript库(例如jQuery),其他所有内容都将变成一堆DOM遍历的意大利面条代码。

var openEle = null;

function Myfunction(obj) {
    var ele = document.getElementById(obj);
    if (openEle != null) {
        openEle.style.display = "none");
    }
    if (ele.style.display == "none") {
        openEle = ele;
        ele.style.display = "block";
    } else {
        ele.style.display = "none";
    }
}

You can use this: 您可以使用此:

Demo here 在这里演示

var lastid;

function Myfunction(obj) {
    var ele = document.getElementById(obj).style;
    var elemLastId = document.getElementById(lastid);
    if (elemLastId != null) {
        elemLastId.style.display = "none";
    }
    lastid = obj;
    if (ele.display == "none") {
        ele.display = "block";
    } else {
        ele.display = "none";
    }
}

I made a new variable to remember the last ID. 我创建了一个新变量来记住上一个ID。 So you can call it and apply display:none to it. 因此,您可以调用它并对其应用display:none

<a class="Label">Contacts</a>
<div>
    <ul class="Submenu">
        <li>Menu 1</li>
        <li>Menu 2</li>
    </ul>
</div>

<a class="Label">About</a>
<div>
    <ul class="Submenu">
        <li>Menu 1</li>
        <li>Menu 2</li>
    </ul>
</div>

And : 和:

(function($) {

    $(function() {

        $('.Label').on('click', function() {
            $('.Submenu').hide();
            $(this).next().find('.Submenu').show();
        });

    });

})(jQuery);

That's the jQuery approach. 那就是jQuery的方法。 I'll let another couragous guy do it with native js :D 我让另一个勇敢的家伙用本地js来完成它:D

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM