下拉菜单 - 限制为 1
Dropdownmenu-Limitation to 1
我只是想问你是否可以限制同时打开的下拉菜单的数量。在下面你可以看到我的下拉菜单的代码。我想包含一个将打开的下拉菜单数量限制为 1 的功能。因此,如果没有打开菜单,它应该正常打开,如果菜单已经打开,它应该关闭这个菜单并打开选定的菜单。
<script>
var dropdown = document.getElementsByClassName("dropdownbtn");
var i;
for (i = 0; i < dropdown.length; i++) {
dropdown[i].addEventListener("click", function() {
this.classList.toggle("active");
var dropdownContent = this.nextElementSibling;
if (dropdownContent.style.display === "block") {
dropdownContent.style.display = "none";
} else {
dropdownContent.style.display = "block";
}
});
}
</script>
提前致谢。
您的“.dropdownbtn”使它变得更加复杂。您如何看待定制?
<nav>
<ul class="my-nav">
<li>
<details class="dropdownbtn">
<summary>First</summary>
<ul>
<li><a href="#">1</a></li>
<li><a href="#">2</a></li>
</ul>
</details>
</li>
<li>
<details class="dropdownbtn">
<summary>Second</summary>
<ul>
<li><a href="#">3</a></li>
<li><a href="#">4</a></li>
</ul>
</details>
</li>
</ul>
</nav>
并且比你的逻辑:
var nav = document.querySelector('.my-nav');
nav.addEventListener('toggle', (event) => {
// Only run if the dropdown is open
if(!event.target.open) {
return;
}
// Get all other open dropdowns and close them
var dropdowns = nav.querySelectorAll('.dropdownbtn[open]');
Array.prototype.forEach.call(dropdowns, (dropdown) => {
if(dropdown === event.target) {
return;
}
dropdown.removeAttribute('open');
});
}, true);
我在 codepen 上为您提供了这个解决方案。
我只是想问你是否可以限制同时打开的下拉菜单的数量。在下面你可以看到我的下拉菜单的代码。我想包含一个将打开的下拉菜单数量限制为 1 的功能。因此,如果没有打开菜单,它应该正常打开,如果菜单已经打开,它应该关闭这个菜单并打开选定的菜单。
<script>
var dropdown = document.getElementsByClassName("dropdownbtn");
var i;
for (i = 0; i < dropdown.length; i++) {
dropdown[i].addEventListener("click", function() {
this.classList.toggle("active");
var dropdownContent = this.nextElementSibling;
if (dropdownContent.style.display === "block") {
dropdownContent.style.display = "none";
} else {
dropdownContent.style.display = "block";
}
});
}
</script>
提前致谢。
您的“.dropdownbtn”使它变得更加复杂。您如何看待定制?
<nav>
<ul class="my-nav">
<li>
<details class="dropdownbtn">
<summary>First</summary>
<ul>
<li><a href="#">1</a></li>
<li><a href="#">2</a></li>
</ul>
</details>
</li>
<li>
<details class="dropdownbtn">
<summary>Second</summary>
<ul>
<li><a href="#">3</a></li>
<li><a href="#">4</a></li>
</ul>
</details>
</li>
</ul>
</nav>
并且比你的逻辑:
var nav = document.querySelector('.my-nav');
nav.addEventListener('toggle', (event) => {
// Only run if the dropdown is open
if(!event.target.open) {
return;
}
// Get all other open dropdowns and close them
var dropdowns = nav.querySelectorAll('.dropdownbtn[open]');
Array.prototype.forEach.call(dropdowns, (dropdown) => {
if(dropdown === event.target) {
return;
}
dropdown.removeAttribute('open');
});
}, true);
我在 codepen 上为您提供了这个解决方案。