【问题标题】:Toggle menu but also allows click inside without closing切换菜单,但也允许在不关闭的情况下单击内部
【发布时间】:2018-03-27 10:54:41
【问题描述】:

首先为随机标题道歉,我真的想不出另一种简洁的方式。

这是我的问题。

我有几个导航图标,当点击切换菜单时会显示,就像你在任何地方看到的一样:facebook 等。

当您在div 之外单击时,它会隐藏菜单。

它有效,但我有两个问题。

  1. 点击外部可以关闭打开的 div,但点击触发切换的图标不会关闭它,它只是立即重新切换。

  2. 我希望能够在不关闭菜单的情况下单击菜单内部,他们目前正在这样做onclick

html 看起来像这样,其中user-menu 是可点击的图标,用于切换其中包含的div

HTML

<nav>
  <div class="user-menu">
    <div id="user-dropdown">MENU CONTENTS HERE</div>
  </div>
</nav>

jQuery

$('.user-menu').click(function () {
   $('#user-dropdown').fadeToggle();
});

$(document).mouseup(function(e) {
   var container = $("#user-dropdown");
   if (!container.is(e.target) && container.has(e.target).length === 0) {
    container.hide();
   }
});

小提琴

https://jsfiddle.net/vo8a1r0p/

编辑 - 回答

结合使用 Bhuwan 的答案和 stopPropagation(),它现在可以正常工作了。

工作 jQUERY

$(document).on("click", function(e) {
  if ($(e.target).hasClass("user-menu")) {
    $('#user-dropdown').fadeToggle();
  } else {
  if ($(e.target).hasClass("dropdown-menu")) {
    $('#user-dropdown').show();
  } else {
    $('#user-dropdown').fadeOut();
  }
 }
});

$("#user-dropdown").click(function(e){
  e.stopPropagation();
});

工作小提琴 https://jsfiddle.net/ne4yfbjp/

【问题讨论】:

  • 请也添加一些菜单html
  • 你能做一个小提琴吗?
  • 都是php生成的。如果我添加它,它看起来会非常混乱并混淆问题。如果有帮助,里面的类是:usernameatname 和一个包含 3 个li 元素的无序列表。
  • 我会弄个 html 小提琴

标签: javascript jquery html


【解决方案1】:

你可以试试这个

$(document).on("click", function(e) {
  if ($(e.target).hasClass("user-menu")) {
    $('#user-dropdown').fadeToggle();
  } else {
    if ($(e.target).closest("#user-dropdown").hasClass("dropdown-menu")) {
      $('#user-dropdown').show();
    } else {
      $('#user-dropdown').fadeOut();
    }
  }
});
.dropdown-menu {
  display: none;
  background: gray;
  padding: 10px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<nav>
  <div>
    <button class="user-menu">Menu</button>
    <div id="user-dropdown" class="dropdown-menu">
      <div class="username">
        Some User
      </div>
      <ul>
        <li><a href="#">Link1</a></li>
        <li><a href="#">Link1</a></li>
      </ul>
    </div>
  </div>
</nav>

【讨论】:

  • 谢谢兄弟,这已经修复了第 1 个问题,但是当我在其中单击时,div 仍然关闭。这是使用您的代码的更新小提琴。 jsfiddle.net/d42a9oyg/1
  • 好的,我通过添加stopPropagation() jsfiddle.net/xjg4rfqy 修复了它,感谢您的帮助!
  • @spice 你需要在下拉菜单中添加一个类jsfiddle.net/hu20ppn1
猜你喜欢
  • 2021-04-18
  • 2019-06-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-29
  • 1970-01-01
  • 2011-08-24
相关资源
最近更新 更多