Jquery - 单击时触发子菜单,然后在第二次单击时关闭

Posted

技术标签:

【中文标题】Jquery - 单击时触发子菜单,然后在第二次单击时关闭【英文标题】:Jquery - trigger submenu on click then close on second click 【发布时间】:2020-11-24 16:30:50 【问题描述】:

我今天正在尝试 Jquery,我必须设置一个仅在手机上触发的子菜单,方法是单击它。 我找到了一种方法来做到这一点!它可以工作,但我无法在再次单击父菜单时关闭它。

你们能帮我做吗?

代码:

$('.menu-item-has-children').find('> li').click(function() 
  $('.menu-item-has-children > li').not(this).find('ul').slideUp();
  $(this).find('ul').stop(true, true).slideToggle(400);
  return false;
);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<nav id="primary-nav">
  <li class="menu-item menu-item-has-children">
    <a href="#">Parent menu</a>
    <ul class="sub-menu">
      <li class="menu-item"><a title="Contract Negotiation">Contract Negotiation</a></li>
      <li class="menu-item"><a title="Contract Negotiation">Contract Negotiation</a></li>
      <li class="menu-item"><a title="Contract Negotiation">Contract Negotiation</a></li>
    </ul>
  </li>
</nav>

再次非常感谢:)

【问题讨论】:

【参考方案1】:

你的选择器在点击功能之前不好。

这就是你想要的?

$('.menuTrigger').click(function() 
  //$('.menu-item-has-children > li').not(this).find('ul').slideUp();
  $(this).next('ul.sub-menu').stop(true, true).slideToggle(400);
  return false;
);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<nav id="primary-nav">
  <li class="menu-item menu-item-has-children">
    <a href="#" class="menuTrigger">Parent menu</a>
    <ul class="sub-menu">
      <li class="menu-item"><a title="Contract Negotiation" href="#">Contract Negotiation</a></li>
      <li class="menu-item"><a title="Contract Negotiation" href="#">Contract Negotiation</a></li>
      <li class="menu-item"><a title="Contract Negotiation" href="#">Contract Negotiation</a></li>
    </ul>
  </li>
</nav>

【讨论】:

非常感谢您的回答。这确实有帮助,但奇怪的是,我不在我的网站上工作。它确实会打开子菜单,但当我再次单击父菜单时不会关闭它。 :// 我的错,这是因为我忘了调用 jquery 3.3.1。有用!非常感谢:D 你能验证我的答案吗 plz :) 完成!对不起这里的新手。 :) 您好,很抱歉打扰,但我仍然在这个脚本上遇到了一点问题。在我的网站中,它确实打开和关闭子菜单。但是子菜单中的 li 不可点击(它只是关闭子菜单)。我能做点什么吗?【参考方案2】:

[已解决] 我在 Facebook 上询问了一位同事,这是有效的代码:

$('.menu-item-has-children > a').click(function() 
  //$('.menu-item-has-children > li').not(this).find('ul').slideUp();
  var $submenu = $(this).next('.sub-menu'); 
  $('.sub-menu').not($submenu).slideUp(200); // fermer les autres menus
  $submenu.slideToggle(200); // slideToggle permet d'ouvrir ou fermer, selon l'état
);
.sub-menu 
display:none
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<nav id="primary-nav">
  <li class="menu-item menu-item-has-children">
    <a href="#">Parent menu</a>
    <ul class="sub-menu">
      <li class="menu-item"><a title="Contract Negotiation">Contract Negotiation</a></li>
      <li class="menu-item"><a title="Contract Negotiation">Contract Negotiation</a></li>
      <li class="menu-item"><a title="Contract Negotiation">Contract Negotiation</a></li>
    </ul>
  </li>
  
  <li class="menu-item menu-item-has-children">
    <a href="#">Parent menu</a>
    <ul class="sub-menu">
      <li class="menu-item"><a title="Contract Negotiation">Contract Negotiation</a></li>
      <li class="menu-item"><a title="Contract Negotiation">Contract Negotiation</a></li>
      <li class="menu-item"><a title="Contract Negotiation">Contract Negotiation</a></li>
    </ul>
  </li>
</nav>

【讨论】:

以上是关于Jquery - 单击时触发子菜单,然后在第二次单击时关闭的主要内容,如果未能解决你的问题,请参考以下文章

jQuery 在第二次单击时删除类并在第二次单击时禁用悬停

Jquery Click 事件在第二次点击时触发,但不是第一次

jQuery - 更改 iframe src 时仅在第二次单击时触发

Jquery .remove() 仅在第二次点击时起作用

仅通过第二次单击即可使用JQuery和SharePointPlus js lib上传到SharePoint库的文件

UseState 仅在第二次单击时显示