单击另一个菜单项时如何切换菜单

Posted

技术标签:

【中文标题】单击另一个菜单项时如何切换菜单【英文标题】:How to toggle up menu when another menu item is clicked 【发布时间】:2018-07-01 15:56:29 【问题描述】:

我正在使用 Genesis 框架开发我自己的子主题。使用我的主题,当您单击***菜单项时,子菜单会在菜单下水平打开。现在,要关闭它,您需要单击相同的菜单选项。如果您在第一个子菜单仍处于打开状态时单击另一个菜单项,则新的子菜单会出现在其上方,从而创建一个子菜单层。

我在这里查看了多个线程,并尝试按照其他人的建议使用e.stopPropagation();。我确定我用错了,因为它不起作用。

下面是我正在使用的代码:

jQuery(document).ready(function()
    jQuery(".nav-header-left .menu-item, .nav-header-right .menu-item").removeClass("menu-open");

    jQuery(".nav-header-left .menu-item-has-children, .nav-header-right .menu-item-has-children")
    .click( function( e )
        jQuery(this).find( 'ul.sub-menu:first' ).slideToggle( function() 
            jQuery(this).parent().toggleClass("menu-open");
        );

        if ( e.target !== this ) 
            return;
        
    );
);

这是一个显示菜单功能的小提琴:https://jsfiddle.net/mve1mrcp/15/(已经更新了几次,让它看起来更好一点)

欢迎提出任何建议!

【问题讨论】:

如果您可以在 jsFiddle 中复制您的菜单或其中的一部分,或者为工作示例提供 html/css/js,这将帮助我们为您的问题找到合适的答案。 @AhmedMusallam 这是菜单的一部分:jsfiddle.net/mve1mrcp 【参考方案1】:

这是您的小修复中的 JS/CSS/HTML

jQuery(document).ready(function() 
  jQuery(".nav-header-left .menu-item, .nav-header-right .menu-item").removeClass("menu-open");

  jQuery(".nav-header-left .menu-item-has-children, .nav-header-right .menu-item-has-children")
    .click(function(e) 
      var $menuItem = jQuery(this);
      console.log($menuItem)
      var $nav = $menuItem.closest('.nav-header-left, .nav-header-right'); // get the nav parent
      var shouldClose = $menuItem.hasClass('menu-open');
      var $openMenuItem = $('.menu-open').removeClass('menu-open'); // toggle all menu items to be closed
      $openMenuItem.find('ul.sub-menu:first').hide(); // hide sub-menu
      if(!shouldClose)
        $menuItem.find('ul.sub-menu:first').slideToggle(function() 
          jQuery(this).parent().addClass("menu-open");
        );
      
    );
    
   jQuery(document).click(function()
   	$('.menu-open').removeClass('menu-open');
   )
);
.genesis-nav-menu .menu-item 
  display: inline-block;
  text-align: left;


li 
  list-style-type: none;


nav 
  display: block;


.nav-header-left 
  background: #000;


.nav-header-left .genesis-nav-menu 
  text-align: left;


.genesis-nav-menu li a 
  color: #fff;
  display: block;
  padding: 22px;
  text-transform: uppercase;
  font-weight: bold;
  font-size: 12px;


.nav-header-left .genesis-nav-menu li > .sub-menu 
  display: none;
  top: 104px;
  height: 100px;
  background-color: #fff;


.genesis-nav-menu .sub-menu 
  left: -9999px;
  opacity: 0;
  position: absolute;
  -webkit-transition: opacity .4s ease-in-out;
  -moz-transition: opacity .4s ease-in-out;
  -ms-transition: opacity .4s ease-in-out;
  -o-transition: opacity .4s ease-in-out;
  transition: opacity .4s ease-in-out;
  width: 200px;
  z-index: 99;


.nav-header-left .genesis-nav-menu li > .sub-menu 
  display: none;
  top: 104px;
  height: 100px;
  background-color: #fff;


.nav-header-left .genesis-nav-menu > .menu-item-has-children:before 
  content: "\f347";
  float: right;
  font: normal 12px/1 'dashicons';
  height: 16px;
  padding: 15px 0px 0px 0px;
  text-align: right;
  z-index: 9999;
  cursor: pointer;
  color: #fff;


.nav-header-left .genesis-nav-menu .menu-open .sub-menu 
  border: none;
  opacity: 1;
  position: absolute;
  left: 0;
  -moz-transition: opacity .4s ease-in-out;
  -ms-transition: opacity .4s ease-in-out;
  -o-transition: opacity .4s ease-in-out;
  -webkit-transition: opacity .4s ease-in-out;
  transition: opacity .4s ease-in-out;
  width: 100%;
  z-index: 99;


.nav-header-left .genesis-nav-menu > li.menu-item-has-children > a 
  pointer-events: none;


.nav-header-left .genesis-nav-menu li > .sub-menu li 
  display: inline-block;


.site-header .genesis-nav-menu li li 
  margin-left: 0;


.nav-header-left .genesis-nav-menu li > .sub-menu li a 
  display: block;
  width: auto;
  font-weight: lighter;
  font-size: 15px;
  margin-top: 15px;
  font-family: 'Fjalla One', sans-serif;


.nav-header-left .genesis-nav-menu .sub-menu a 
  background-color: #fff;
  color: #333;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<nav class="nav-header-left">
  <ul id="menu-left" class="menu genesis-nav-menu">
    <li id="menu-item-377" class="menu-item menu-item-type-post_type menu-item-object-page current-menu-ancestor current-menu-parent current_page_parent current_page_ancestor menu-item-has-children menu-item-377"><a href="#" itemprop="url"><span itemprop="name">Courses</span></a>
      <ul class="sub-menu">
        <li id="menu-item-376" class="menu-item menu-item-type-custom menu-item-object-custom current-menu-item current_page_item menu-item-home menu-item-376"><a href="#" itemprop="url"><span itemprop="name">Ontario</span></a></li>
        <li id="menu-item-388" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-388"><a href="#" itemprop="url"><span itemprop="name">Nova Scotia</span></a></li>
        <li id="menu-item-374" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-374"><a href="#" itemprop="url"><span itemprop="name">Driving Ranges</span></a></li>
        <li id="menu-item-375" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-375"><a href="#" itemprop="url"><span itemprop="name">Daily Updates</span></a></li>
        <li id="menu-item-392" class="menu-item menu-item-type-post_type menu-item-object-post menu-item-392"><a href="#" itemprop="url"><span itemprop="name">Loch March</span></a></li>
      </ul>
    </li>
    <li id="menu-item-219" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-219"><a target="_blank" href="#" itemprop="url"><span itemprop="name">Tee Times</span></a></li>
    <li id="menu-item-63" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-has-children menu-item-63"><a href="#" itemprop="url"><span itemprop="name">Memberships</span></a>
      <ul class="sub-menu">
        <li id="menu-item-487" class="menu-item menu-item-type-post_type menu-item-object-post menu-item-487"><a href="#" itemprop="url"><span itemprop="name">Member Guest Days</span></a></li>
        <li id="menu-item-395" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-395"><a href="#" itemprop="url"><span itemprop="name">2018 Memberships</span></a></li>
        <li id="menu-item-396" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-396"><a href="#" itemprop="url"><span itemprop="name">Add-On Programs</span></a></li>
        <li id="menu-item-398" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-398"><a href="#" itemprop="url"><span itemprop="name">Corporate Programs</span></a></li>
        <li id="menu-item-397" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-397"><a href="#" itemprop="url"><span itemprop="name">FAQs</span></a></li>
      </ul>
    </li>
  </ul>
</nav>

【讨论】:

Musasllam 这太棒了!一个问题,不过。如果连续两次单击菜单项而不是重新打开菜单,是否有任何方法可以关闭菜单?或者在单击页面上的其他位置时关闭菜单。感谢您的所有帮助! 更新了答案

以上是关于单击另一个菜单项时如何切换菜单的主要内容,如果未能解决你的问题,请参考以下文章

单击侧菜单项时如何避免刷新页面

右键单击任何菜单项时如何获取 MenuItem 名称?

我们如何在单击菜单条项时突出显示活动菜单项?

在java中单击菜单项时如何更改形状

如何在WPF中单击菜单项时在父窗口下打开子窗口?

在 UWP 中单击汉堡菜单项时如何提高应用程序性能?