如何在打开另一个 Javascript 下拉菜单时关闭另一个下拉菜单

2024-01-16

我不太熟悉 JavaScript,我希望能得到一些帮助来解决我似乎无法解决的问题。目前我的网站上有 2 个下拉菜单。一种是用于导航的下拉菜单,单击汉堡菜单图标时会激活该菜单。第二个下拉列表用于显示我网站上的类别。目前,当我单击一个下拉列表时,我必须再次单击它才能将其关闭。如果我单击第二个下拉菜单而不关闭第一个下拉菜单,则两个下拉菜单都将保持可见。我希望发生的是两件事。首先,我希望如果用户单击 div 之外的任何位置来获取下拉菜单,它会自动关闭。我希望看到发生的第二件事是一次只有一个下拉菜单可见。因此,如果我单击一个下拉列表并打开另一个下拉列表,我希望将其关闭。希望我能很好地解释这一点。现在来看我正在使用的代码。

以下是我脑子里的内容。

<script>
/* When the user clicks on the button,
toggle between hiding and showing the dropdown content */
function DropDownMenuNavigation() {
document.getElementById("b2DropDownMenuNav").classList.toggle("show");
}
function DropDownMenuCategory() {
document.getElementById("b2DropDownMenuCat").classList.toggle("show");  
}
</script>

然后我使用它作为激活导航下拉菜单的按钮。这已经包含在我的身体里了。

<div class="dropbtn" style="float: left;">
<button onclick="DropDownMenuNavigation()" class="dropbtn">&#9776; MENU</button>
</div>

这就是我用来包含我的类别下拉菜单的内容。

<div class="dropbtn" style="float: left;">
<button onclick="DropDownMenuCategory()" class="dropbtn">CATEGORIES</button>
</div>

现在最后是我使用的CSS,只是偶尔有帮助。

/* Dropdown Button */
.dropbtn {
background-color: #0066a2;
color: white;
padding: 1px;
font-size: 15px;
font-weight: bold;
border: none;
cursor: pointer;
}
.dropbtn a {
color: #FFFFFF;
text-decoration: none;
font-size: 15px;
font-weight: bold;
}

/* The container <div> - needed to position the dropdown content */
.dropdown {
float: left;
position: relative;
display: inline-block;
}

/* Dropdown Content (Hidden by Default) */
.dropdown-content {
display: none;
position: absolute;
background-color: #0066a2;
min-width: 260px;
max-width: 960px;
box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);
z-index: 1;
}

/* Links inside the dropdown  */
.dropdown-content a {
color: #000000;
text-decoration: none;
}

/* Show the dropdown menu (use JS to add this class to the .dropdown-content container when the user clicks on the dropdown button) */
.show {display:block;} 

那么,完成我所要求的事情的最佳方法是什么?有人可以帮我一把并指出我正确的方向吗?非常感谢,我很感谢你能给我提供的任何帮助。


The onclick属性不应包含()。它应该看起来像这样:

<button onclick="DropDownMenuNavigation" class="dropbtn">&#9776; MENU</button>

或者,更好的是,不要将事件侦听器内联,而是将其放在脚本中。

另外,按下按钮时,从另一个下拉列表中删除“show”类。

看这里:

document.getElementById('menudropbtn').addEventListener('click', function () {
	document.getElementById('b2DropDownMenuNav').classList.toggle('show')
  document.getElementById('b2DropDownMenuCat').classList.remove('show')
})

document.getElementById('categoriesdropbtn').addEventListener('click', function () {
	document.getElementById('b2DropDownMenuCat').classList.toggle('show')
  document.getElementById('b2DropDownMenuNav').classList.remove('show')
})
/* Dropdown Button */
.dropbtn {
  background-color: #0066a2;
  color: white;
  padding: 1px;
  font-size: 15px;
  font-weight: bold;
  border: none;
  cursor: pointer;
}

.dropbtn a {
  color: #FFFFFF;
  text-decoration: none;
  font-size: 15px;
  font-weight: bold;
}


/* The container <div> - needed to position the dropdown content */
.dropdown {
  float: left;
  position: relative;
  display: inline-block;
}


/* Dropdown Content (Hidden by Default) */
.dropdown-content {
  display: none;
  position: absolute;
  background-color: #0066a2;
  min-width: 260px;
  max-width: 960px;
  box-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.2);
  z-index: 1;
}


/* Links inside the dropdown  */
.dropdown-content a {
  color: #000000;
  text-decoration: none;
}


/* Show the dropdown menu (use JS to add this class to the .dropdown-content container when the user clicks on the dropdown button) */
.show {
  display: block;
}
<div class="dropbtn" style="float: left;">
  <button class="dropbtn" id="menudropbtn">&#9776; MENU</button>
  <div class="dropdown">
    <div class="dropdown-content" id="b2DropDownMenuNav">
      <a>Something</a>
    </div>
  </div>
</div>

<div class="dropbtn" style="float: left;">
  <button class="dropbtn" id="categoriesdropbtn">CATEGORIES</button>
  <div class="dropdown">
    <div class="dropdown-content" id="b2DropDownMenuCat">
      <a>Something else</a>
    </div>
  </div>
</div>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在打开另一个 Javascript 下拉菜单时关闭另一个下拉菜单 的相关文章

随机推荐

  • 如何在Android国际象棋游戏中制作动画

    我正在为 Android 开发国际象棋游戏 androidchess appspot com http androidchess appspot com 如果我想添加动画 我应该使用扩展Canvas的自定义View 我现在这样做 还是扩展S
  • 不小心创造了病毒?

    我经常看到这种情况发生 我用 Delphi 编写一个应用程序 当我编译它时 病毒扫描程序告诉我我已经创建了一个病毒 然后立即再次删除了可执行文件 这很烦人 但通过完全重建 首先删除 dcu 文件 有时只需等待 即可轻松修复 据我所知 Del
  • 类型“[String,AnyObject?]”不符合协议 AnyObject?:为什么?

    我试图理解为什么会出现编译错误 类型 String AnyObject 不符合 AnyObject 协议 var cars String AnyObject model Ferrari var JSON String AnyObject c
  • 在 Python 中使用带有线程的全局字典

    访问 更改字典值是线程安全的吗 我有一本全球词典foo以及带有 id 的多个线程id1 id2 idn 是否可以访问和更改foo如果已知每个线程仅使用其 id 相关值 例如线程 则无需为其分配锁id1只会与foo id1 假设 CPytho
  • 再次休息并获取...

    一般来说 REST 社区似乎不喜欢 GET 请求中的复杂数据 我想知道这背后是否有一个好的原则 或者只是具体化了 GET 字典的 任意 url 长度 限制 我对 url 和资源之间的对应关系感到满意 但为什么我的 GET 请求不能在请求正文
  • Android Kudan - 扩展 ARActivity 将停止系统相机手电筒的工作(闪光灯)

    我正在开发 kudan SDK 用于使用标记构建 3D 模型增强现实对象 所有这些都工作得很好 但是当我在同一个 ARActivity 上构建相机手电筒时 闪光灯将停止工作 甚至它会停止系统闪光灯手电筒的工作 开 关手电筒 来自系统小部件
  • 从 Neo4j 删除所有节点时出现 ConstraintViolationTransactionFailureException

    当尝试从 Neo4j 图形数据库中删除所有节点时 我过去已经在较小的数据集上成功完成过多次 我一直遇到Error undefined undefined运行此查询后 MATCH n DETACH DELETE n 我认为我尝试一次删除的节点
  • 使用什么对称密码来加密消息?

    我对加密一无所知 但我需要它 如何 假设您有一个节点系统 节点通过异步消息在网络上相互通信 节点不维护有关其他节点的会话信息 这是设计限制 假设您想确保只有您的节点可以读取正在发送的消息 我相信加密是解决这个问题的方法 由于节点不维护会话
  • 终端上的“快速构建”抛出“错误:找不到根清单”

    我想在终端上运行我的快速编程 所以我cd我的项目的根文件夹 然后运行 swift build 但是出现了错误 error root manifest not found有什么帮助吗 如果其他人偶然发现同样的问题 我的解决方案是 cd 到我的
  • 在 Windows 上运行 Django 时出现“WinError 10013”

    自从我遇到这个问题以来已经快一个月了 我非常感谢您的帮助 尝试登录我的 Django Web 应用程序时 我在 accounts login 处遇到 OSError 我能够登录 127 0 0 1 8000 admin 但不能登录 acco
  • findDOMNode 与 getElementById 对于普通 DOM 元素

    我不太确定这个问题有真正的答案 但我想知道是否最好使用以下命令在 React 应用程序中查找常规 DOM 元素 A refs 和 ReactDOM findDOMNode or b 普通旧 document getElementById 我
  • 导入而不执行类 - python

    我的问题是我有一个包含类的文件 并且在这个类内有一堆代码将被执行 所以每当我导入该文件时它就会执行 无需创建该类的对象 这是例子 FILE X class d def init self print print this will NOT
  • Gradle 和 Android 支持库

    几乎在每个 Android 应用程序中 我们都需要一些库项目 例如 ABS HoloEverywhere 等 其中大部分都在 Maven Central 中 这很好 不好的是 它们中的大多数都依赖于支持库 并且自然地指向 Maven Cen
  • 在双变量中获取数字的问题

    我的 java 程序中需要的函数出现了一些问题 我想检查 双精度 变量的总位数 例如 5 应该返回 1 5 0034 应该返回 5 2 04 应该返回 3 我的函数是这样的 private int getDoubleLength doubl
  • WPF Datagrid 绑定自定义列标题

    我试图弄清楚如何使用 MVVM 模式将 WPF DataGrid 的列标题和主要数据绑定到数据源 我正在寻找的结果如下所示 source vallelunga com http brian vallelunga com files data
  • 浮点按位运算的用处

    我注意到浮点存在 SSE 指令 这让我想知道 您可以对 fp integer union 中的标量执行相同的操作 我突然想到 如果对浮点数数组的各个分量进行按位或运算 则可以通过查看结果的符号位来快速确定它们中是否有任何一个为负数 浮点值的
  • 获取 TWIG 模板中的控制器名称

    我正在学习 symfony2 3 当我尝试在 twig 模板中获取控制器名称时出现错误 控制器 namespace Acme AdminBundle Controller use Symfony Bundle FrameworkBundle
  • Mac OS-X Mountain Lion 上的 GCC-4.2 错误,无法使用 pip / virtualenv 安装某些软件包

    我看到一个非常烦人的错误 我真的不知道如何处理 这似乎很常见 我几乎尝试了所有能找到的解决方案 但都无济于事 我正在尝试使用 pip 安装库 gevent psycopg2 和 greenlet 都遇到过这个问题 问题似乎是我的计算机找不到
  • 如何从服务器在 ViewPager 内的 VideoView 上播放视频

    我尝试开发一个应用程序从服务器检索视频并在 viewpager 内的 videoview 上播放 原始文件夹中的视频工作正常 但有两个问题 1 部分视频无法播放 或黑色活动显示 2 页面滚动时视频不停止 那么如何使用 URL 而不是 and
  • 如何在打开另一个 Javascript 下拉菜单时关闭另一个下拉菜单

    我不太熟悉 JavaScript 我希望能得到一些帮助来解决我似乎无法解决的问题 目前我的网站上有 2 个下拉菜单 一种是用于导航的下拉菜单 单击汉堡菜单图标时会激活该菜单 第二个下拉列表用于显示我网站上的类别 目前 当我单击一个下拉列表时