javascript - 通过单击切换开关外部关闭导航

标签 javascript jquery

我已经摆弄这个有一段时间了,但无法真正使其按预期工作...所以,我想在单击切换按钮外部时关闭导航,我尝试了一些使用 stopPropagation() 解决方案,但并没有真正理解它是如何工作的。有人可以提供解决方案并简要解释一下如何实现吗?非常感谢您的帮助!

我已经尝试过使用 stopPropagation 的解决方案

Click outside menu to close in jquery

但它只在第一次起作用,隐藏菜单后就不会再次切换..

$(".app-toggle-menu").on('click', function() {
      $(".app-main-navigation").toggleClass("app-main-navigation--expanded");
});

$('html').click(function() {
   $(".app-main-navigation").hide();
});

$('.app-toggle-menu').click(function(event){
   event.stopPropagation();
});
.app-main-navigation {
  background: grey;
  display: none;
}

.app-main-navigation--expanded {
  display: block;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button class="app-toggle-menu">
  toggle
</button>

<nav class="app-main-navigation">
  <ul>
    <li>one</li>
    <li>two</li>
  </ul>
</nav>

最佳答案

使用 jQuery 的 removeClass() 方法而不是 hide()

$(".app-toggle-menu").on('click', function() {
      $(".app-main-navigation").toggleClass("app-main-navigation--expanded");
});

$('html').not(".app-toggle-menu").click(function() {
   $(".app-main-navigation").removeClass("app-main-navigation--expanded");
});

$('.app-toggle-menu').click(function(event){
   event.stopPropagation();
});
.app-main-navigation {
  background: grey;
  display: none;
}

.app-main-navigation--expanded {
  display: block;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button class="app-toggle-menu">
  toggle
</button>

<nav class="app-main-navigation">
  <ul>
    <li>one</li>
    <li>two</li>
  </ul>
</nav>

关于javascript - 通过单击切换开关外部关闭导航,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49195165/

相关文章:

javascript - 一页中具有不同参数的多个数据表

javascript - 使用 jQuery 克隆 html 元素

javascript - CKEditor setData 未清除或更改 rte 中的文本

javascript - $.jquery .post 返回的数据(json)为 'undefined'

javascript - 依次向div元素添加css类

javascript - Angular $watch 未在弹出窗口修改的字段上触发

javascript - 如果值为空,则不要在追加时添加类属性

jquery - 无法在同一页面上显示多个 jPicker 颜色选择器

javascript - 为什么我的第一个数组项总是包含 'Function' ?

javascript - 如何在javascript中解析日期中的 "30-06-2017 07:55 pm"