javascript - 单击外部时隐藏列表(第 2 部分)

标签 javascript jquery

下面的代码部分有效,单击按钮可切换菜单。当菜单可见时,我可以单击任意位置将其关闭。

但是,如果我在菜单可见时单击按钮,它会隐藏然后再次显示。这不是预期的行为。

$(".lang-toggle-btn").click(function() {
  event.preventDefault();

  $(this.nextElementSibling).fadeToggle();

});

$(document).mouseup(function(e) {

  if (e.target.className == "lang-toggle-btn") {
    return false;
  }
  var container = $(".lang-menu");

  if (!container.is(e.target) && container.has(e.target).length === 0) {

    container.fadeOut();

  }
});
.lang-menu {
  display: none;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="lang-wrap">
  <div class="lang-toggle">
    <span>Currently viewing</span>
    <button class="lang-toggle-btn"><span class="flag"></span><span class="country">United Kingdom</span></button>

    <div class="lang-menu">
      <ul>
        <li><a href="/de"><span class="flag"></span><span class="country">Deutschland</span></a></li>
        <li><a class="active" href="/"><span class="flag"></span><span class="country">United Kingdom</span></a></li>
      </ul>
    </div>
  </div>
</div>

最佳答案

你可以试试这个代码。发生这种情况是因为当您单击按钮时,目标元素的类是 country 而不是 lang-toggle-btn

jQuery(".lang-toggle-btn").click(function() {
      event.preventDefault();
      event.stopPropagation();
     jQuery(this.nextElementSibling).fadeToggle();

    });

    jQuery(document).mouseup(function(e) {
        if(e.target.className == "lang-toggle-btn" || e.target.className == "flag" || e.target.className == "country"){
        return false;
      }
      var container = $(".lang-menu");

      if (!container.is(e.target) && container.has(e.target).length === 0) {

        container.fadeOut();

      }
    });
.lang-menu {
            display: none;
            }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <div class="lang-wrap">
      <div class="lang-toggle">
        <span>Currently viewing</span>
        <button class="lang-toggle-btn"><span class="flag"></span><span class="country">United Kingdom</span></button>
      
      <div class="lang-menu">
        <ul>
          <li><a href="/de"><span class="flag"></span><span class="country">Deutschland</span></a></li>
          <li><a class="active" href="/"><span class="flag"></span><span class="country">United Kingdom</span></a></li>
        </ul>
      </div></div>
    </div>

关于javascript - 单击外部时隐藏列表(第 2 部分),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50642833/

相关文章:

javascript - 谷歌地图 - 附近的位置

javascript - Angular JS指令的return语句中的 '^^'是什么意思

javascript - 调用回调函数后浏览器不呈现更新值

javascript - 如何让 jQuery 在窗口调整大小时动态添加 css

javascript 或 jquery 仅输入文本数字并自动屏蔽

javascript - 在 Javascript 代码中使用 Html.dropdownList()

javascript - 使用 $.post 回调生成 html 后未注册事件

javascript - php 中的静态标题布局

javascript - 使用数据切换操作 html 进行分页

javascript - bootstrap mega 菜单,如何更改为 onclick 功能并为移动设备下拉元素?