【问题标题】:How to remove toggled class when clicking outside menu单击外部菜单时如何删除切换类
【发布时间】:2018-04-02 09:38:39
【问题描述】:

下拉菜单使用 CSS 和 HTML/JS 设计,使用从 JS 添加的名为“is-open”的类。一旦出现在指定的 HTML div 中,它将激活 CSS 以显示子菜单。

但是有一个小问题,即一旦单击下拉菜单就不会消失,除非单击相同的菜单项。 (在 menu-content div 外部单击时,该类不会取消切换)

作为一项基本功能,一旦用户不仅点击菜单,而且点击页面上的任何位置,此菜单都需要消失。

我现在的javascript如下:

$(document).ready(function() {
   $(".has-submenu").click(function(e) {
      e.stopPropagation();
      if($(this).hasClass("is-open")) {
         $(this).removeClass("is-open");
      } else {
         $(".has-submenu").removeClass("is-open");
         $(this).addClass("is-open");
      }
   });
});

这是代码的codepen示例:https://codepen.io/anon/pen/EwMjrz

【问题讨论】:

  • @FerhadOthman 您的解决方案不起作用。当在 div 外部单击时,它允许第一个菜单项(在本例中为“文章”)折叠,但是任何后续菜单项都不会受到影响。见codepen.io/hioioasd90/pen/qPwBEW
  • 第 13 行 var element = document.querySelector(".has-submenu.is-open"); 选择器必须是 class is-open

标签: javascript jquery html css menu


【解决方案1】:

您可以向文档添加事件侦听器以像这样关闭菜单

$(document).ready(function() {
  $(".has-submenu").click(function(e) {
    e.stopPropagation();
    if($(this).hasClass("is-open")) {
      $(this).removeClass("is-open");
    } else {
      $(".has-submenu").removeClass("is-open");
      $(this).addClass("is-open");
    }
  });
  $(document).on('click', function (e) {
    e.stopPropagation();
    $('.has-submenu').removeClass("is-open");
  });
});

这应该可以解决问题!

【讨论】:

  • 我已将您修改后的代码添加到 codepen codepen.io/anon/pen/EwMjrz 但它仍然无法正常工作。
  • 我假设您没有实际测试过您的解决方案,因为您的选择器不正确,并且这仅在单击 WebsitePrimaryNavdiv 部分时有效,而不是页面上的其他位置。
  • 抱歉,我编辑了有错字的帖子。我在@109881提供的codepen上测试过(在has-submenu前加点)
  • @3Dos 现在选择器是正确的,除非您在 WebsitePrimaryNavheader 部分中单击,否则它仍然不起作用。这在添加内容时会起作用,但如果内容没有填满屏幕,它只会在页面内容的边缘内,这将激活正文点击功能。
  • @NewToJS :在最后一次编辑中修复了它。对不起,我不习惯 jQuery。
猜你喜欢
  • 1970-01-01
  • 2019-11-29
  • 1970-01-01
  • 2022-09-26
  • 2019-01-18
  • 2012-04-13
  • 2018-07-01
  • 2019-09-02
  • 1970-01-01
相关资源
最近更新 更多