我有以下代码的简单jQuery下拉菜单.它工作正常.当我点击菜单,例如:项目,然后下拉菜单将显示.现在我需要关闭下拉菜单,当我再次点击项目时,如果我再次点击,它将显示下拉菜单.有什么办法可以做到这一点吗?

$(".dropdown-toggle").on("click", function(e) {
  e.stopPropagation();

  $(".dropdown-menu").removeClass("active");
  $(this).siblings(".dropdown-menu").addClass("active");
});
.dropdown-menu {
    min-width: 10rem;
    margin-top: 10px;
    background: #ffffff;
    border-radius: .25rem;
    padding: .5rem 0;
    visibility: hidden;
    opacity: 0;
    -webkit-box-shadow: 0 3px 3px rgba(0,0,0,0.2);
    -moz-box-shadow: 0 3px 3px rgba(0,0,0,0.2);
    box-shadow: 0 3px 3px rgba(0,0,0,0.2);
}

.dropdown-menu.active {
  visibility: visible;
    opacity: 1;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<ul>
  <li class="dropdown">
    <a class="dropdown-toggle" id="projects">Projects</a>

    <div class="dropdown-menu anim-1" data-target="projects">
      <a class="dropdown-item" href="#">ABC</a>
      <a class="dropdown-item" href="#">DEF</a>
    </div>
  </li>
  <li class="dropdown">
    <a class="dropdown-toggle" id="products">Products</a>

    <div class="dropdown-menu anim-1" data-target="products">
      <a class="dropdown-item" href="#">GHI</a>
      <a class="dropdown-item" href="#">JKL</a>
      <a class="dropdown-item" href="#">MNO</a>
    </div>
  </li>
</ul>

推荐答案

在删除.active之前过滤$(".dropdown-menu")

$(".dropdown-menu").not(menu).removeClass("active");

$(".dropdown-toggle").on("click", function (e) {
  e.stopPropagation();

  const menu = $(this).siblings(".dropdown-menu");
  $(".dropdown-menu").not(menu).removeClass("active");
  menu.toggleClass("active");
});
.dropdown-menu {
    min-width: 10rem;
    margin-top: 10px;
    background: #ffffff;
    border-radius: .25rem;
    padding: .5rem 0;
    visibility: hidden;
    opacity: 0;
    -webkit-box-shadow: 0 3px 3px rgba(0,0,0,0.2);
    -moz-box-shadow: 0 3px 3px rgba(0,0,0,0.2);
    box-shadow: 0 3px 3px rgba(0,0,0,0.2);
}

.dropdown-menu.active {
  visibility: visible;
    opacity: 1;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<ul>
  <li class="dropdown">
    <a class="dropdown-toggle" id="projects">Projects</a>

    <div class="dropdown-menu anim-1" data-target="projects">
      <a class="dropdown-item" href="#">ABC</a>
      <a class="dropdown-item" href="#">DEF</a>
    </div>
  </li>
  <li class="dropdown">
    <a class="dropdown-toggle" id="products">Products</a>

    <div class="dropdown-menu anim-1" data-target="products">
      <a class="dropdown-item" href="#">GHI</a>
      <a class="dropdown-item" href="#">JKL</a>
      <a class="dropdown-item" href="#">MNO</a>
    </div>
  </li>
</ul>

Javascript相关问答推荐

使用AJX发送表单后,$_Post看起来为空

通过使用100%间隔时间来代表我们还剩多少时间来倒计时

使用续集和下拉栏显示模型属性

MongoDB中的引用

使用JavaScript重新排序行

TypeScript索引签名模板限制

如何将Map字符串,布尔值转换为{key:string;value:bo布尔值;}[]?<>

我创建了一个创建对象的函数,我希望从该函数创建的对象具有唯一的键.我怎么能做到这一点?

如何在Angular17 APP中全局设置AXIOS

如何强制Sphinx中的自定义js/css文件始终加载更改而不缓存?

如何在Svelte中从一个codec函数中调用error()?

为什么云存储中的文件不能公开使用?

为什么当我更新数据库时,我的所有组件都重新呈现?

处理app.param()中的多个参数

MongoDB中的嵌套搜索

我不知道如何纠正这一点.

在使用JavaScript以HTML格式显示Google Drive中的图像时遇到问题

在此div中添加一个类,并在一段时间后在Java脚本中将其删除

Playwright:ReferenceError:browserContext未定义

如何使用Angular JS双击按钮