Jquery下拉菜单显示/隐藏多个
Jquery dropdown menu show/hide multiple
我一直在看很多问题/答案,但仍然无法解决我的问题。所以我有一个JS下拉菜单(点击,而不是悬停),但如果我打开一个下拉菜单,我点击到第二个菜单,然后另一个下拉菜单将打开,但前一个不会关闭。
点击菜单外部关闭下拉菜单,这是伟大的,但它是不够的,我希望第一个下拉菜单关闭,即使点击第二个!
<li><a onclick="myFunction_tools()" class="dropmenu" href="#">Tools</a></li>
<div id="myToolsDropdown" class="down">
<div>
Content here...
</div>
</div>
<li><a onclick="myFunction_forum()" class="dropmenu" href="#">Forum</a></li>
<div id="myForumDropdown" class="down">
<div>
Content here...
</div>
</div>
JS:
function myFunction_tools() {
document.getElementById("myToolsDropdown").classList.toggle("show");
}
function myFunction_forum() {
document.getElementById("myForumDropdown").classList.toggle("show");
}
window.onclick = function(event) {
if (!event.target.matches('.dropmenu')) {
var dropdowns = document.getElementsByClassName("down");
var i;
for (i = 0; i < dropdowns.length; i++) {
var openDropdown = dropdowns[i];
if (openDropdown.classList.contains('show')) {
openDropdown.classList.remove('show');
}
}
}
}
$(".down").click(function(e){
e.stopPropagation();
});
EDIT 2:
这里有一个解决方案,应该对你有用:
$(document).ready(function() {
$('.dropmenu').click(function(e) {
e.preventDefault();
$('.down').hide();
$(e.target).next('.down').show();
});
});
.down {
display: none;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<li><a class="dropmenu" href="#">Tools</a>
<div id="myToolsDropdown" class="down">
<div>
Content here...
</div>
</div></li>
<li><a class="dropmenu" href="#">Forum</a>
<div id="myForumDropdown" class="down">
<div>
Content here...
</div>
</div></li>
原始:当你点击下拉菜单时,你可以防止所有下拉菜单关闭:
如果(! event.target.matches (.dropmenu))
您必须更改条件,因此它只匹配当前活动的下拉列表。比如"if the event target matches the current active dropdown, prevent action
"。您可以通过检查open
类来确定当前活动的下拉列表。
if (!event.target.matches('.dropmenu.active'))
所以它关闭点击时的所有下拉菜单,不是在.dropmenu.active
上,然后触发点击。
此外,因为你似乎是使用jQuery无论如何,你可以优化你的代码通过使用jQuery在整个脚本:
$(window).click(fucntion(event) {
var $target = $(event.target);
if(!$target.hasClass('show')){
$('.down').removeClass('show');
$target.addClass('show');
}
});
只需删除函数上一个下拉菜单的show类。例如:
function myFunction_tools() {
document.getElementById("myToolsDropdown").classList.toggle("show");
document.getElementById("myForumDropdown").classList.remove("show");
}
相关文章:
- 基于其他下拉菜单选择隐藏/显示下拉菜单
- 一系列下拉菜单,由jQuery提供支持,隐藏和显示,但不在Chrome中
- 单击下拉菜单隐藏其他下拉菜单
- 如何隐藏当前选定的选项,使其在打开下拉菜单时不显示
- 根据两个下拉菜单的选择设置隐藏值
- 隐藏在导航栏中的下拉菜单
- 如何根据下拉菜单选择隐藏/显示文本框
- 隐藏下拉菜单,单击菜单中的项目
- 如何隐藏下拉菜单,如果我点击身体任何元素
- 引导:隐藏下拉菜单时,移动和链接到父
- 当DOM元素被聚焦时隐藏下拉菜单
- 如何显示和隐藏下拉菜单
- 点击后隐藏下拉菜单,鼠标悬停后不显示
- 隐藏下拉菜单上的开始在手机上
- 隐藏下拉菜单当其他东西被点击时,除了下拉菜单本身
- 隐藏下拉菜单
- 当点击隐藏下拉菜单-引导
- 显示/隐藏下拉菜单
- 在外部单击时隐藏下拉菜单
- 如何在 html/javascript 中隐藏下拉菜单