单击另一个关闭下拉菜单

诺瑞

我正在使用 vanilla JavaScript 制作一个响应式下拉导航栏。在移动视图中,我希望在单击一个下拉列表时另一个应该关闭。这里的 JavaScript:

dropbtns.forEach(link => {
  link.addEventListener("click", function(e) {
    e.currentTarget.nextElementSibling.classList.toggle("showdd");
  });
});

并显示下拉列表:

  .showdd {
    height: auto;
  }

html代码:

<div class="nav-container">
    <div class="brand">
        <a href="#!">Logo</a>
    </div>
    <nav>
        <div class="nav-mobile"><a id="nav-toggle" href="#!"><span></span></a></div>
        <ul id="nav-list">
            <li>
                <a href="#!">Home</a>
            </li>
            <li>
                <a href="#!">About</a>
            </li>
            <li class="dropdown">
                <a href="#!" class='dropbtn'>Services <i class="fas fa-sort-down"></i></a>
                <ul class="nav-dropdown">
                    <li>
                        <a href="#!">Web Design</a>
                    </li>
                    <li>
                        <a href="#!">Web Development</a>
                    </li>
                    <li>
                        <a href="#!">Graphic Design</a>
                    </li>
                </ul>
            </li>
            <li>
                <a href="#!">Pricing</a>
            </li>
            <li class="dropdown">
                <a href="#!" class='dropbtn'>Portfolio <i class="fas fa-sort-down"></i></a>
                <ul class="nav-dropdown">
                    <li>
                        <a href="#!">Web Design</a>
                    </li>
                    <li>
                        <a href="#!">Web Development</a>
                    </li>
                    <li>
                        <a href="#!">Graphic Design</a>
                    </li>
                </ul>
            </li>
            <li>
                <a href="#!">Contact</a>
            </li>
        </ul>
    </nav>
</div>

完整代码可以在这里找到

特里

因此,如果您想.nav-dropdown在点击时折叠所有其他内容,您只需要:

  1. 存储.nav-dropdown当前元素的引用(以后比较)
  2. 切换它的类(正如你已经在做的那样)
  3. .nav-dropdown遍历 DOM 树中的所有其他内容并遍历它们。如果它们与当前引用不匹配,则您知道下拉列表属于另一个链接,您可以删除该类

考虑到这一点,我们得出以下代码:

dropbtns.forEach(link => {
  link.addEventListener('click', e => {
    const ownDropdown = e.currentTarget.nextElementSibling;
    ownDropdown.classList.toggle('showdd');

    document.querySelectorAll('.dropbtn + .nav-dropdown').forEach(el => {
      if (el !== ownDropdown)
        el.classList.remove('showdd');
    });
  });
});

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在另一个下拉菜单中选择选项时显示下拉菜单

如何基于另一个下拉菜单更改下拉菜单值

禁用p下拉菜单,具体取决于选择另一个p下拉菜单PrimeNG

根据另一个下拉菜单选择过滤下拉菜单

CSS在下拉菜单中有另一个下拉菜单

当我通过另一个下拉菜单悬停时,出现下拉菜单的子菜单

通过单击其他菜单项来隐藏另一个下拉菜单

WordPress下拉菜单重叠-悬停一个可打开另一个

打开另一个时如何关闭相邻的下拉菜单

下拉选择的选项在另一个下拉菜单中选择选项

来自另一个下拉菜单的国际电话输入更改下拉菜单拨号代码

多个下拉菜单,即使我单击另一个下拉菜单,也只有一个可用

关闭下拉菜单,同时在引导程序中打开另一个菜单

使自动完成工作在下拉菜单上,并使其填充另一个下拉菜单的内容

根据另一个下拉菜单更改下拉菜单

单击另一个下拉菜单时,下拉菜单中缺少离子选择的项目

根据另一个下拉菜单的选定值,过滤并显示一个下拉菜单的选项

jQuery-在外部单击或单击另一个下拉菜单时,关闭下拉菜单/删除活动类

根据使用Javascript在另一个下拉菜单中选择的内容来设置下拉菜单值

单击另一个幻灯片菜单或下拉菜单时,幻灯片菜单不会隐藏

我有两个下拉菜单,如果更改下拉菜单的值,它将影响另一个下拉菜单

选择另一个时关闭下拉菜单

打开另一个时导航下拉菜单不会关闭

当下拉菜单在另一个组合框上关闭时,如何更新 WPF 组合框?

如果另一个下拉菜单打开,我如何关闭下拉菜单

如果单击另一个下拉菜单,如何使下拉菜单自动关闭?

打开一个下拉菜单,用 JavaScript 关闭另一个

单击另一个下拉列表后如何关闭一个下拉列表

当另一个下拉菜单打开时隐藏侧面菜单中的一个下拉菜单