【问题标题】:Close menu dropdown by clicking on it twice单击两次关闭菜单下拉菜单
【发布时间】:2020-03-18 09:40:18
【问题描述】:



我有一个带有一些下拉菜单的垂直菜单。实际上不能同时打开更多的下拉菜单,并且,如果打开了一个下拉菜单,当我单击另一个下拉按钮时,下拉菜单会自行关闭。
You can see a demo here

问题是现在,如果我在同一个下拉按钮上单击两次,第一次单击下拉菜单时会自行打开(应该如此),但是第二次下拉列表不会自行关闭
此外,当下拉菜单打开并且我单击菜单上的另一个按钮时,下拉菜单也不会自行关闭。
在这里你可以看到我的代码:

<div class="sidenav">
  <a href="#about">About</a>
  <a href="#services">Services</a>
  <a href="#clients">Clients</a>
  <a href="#contact">Contact</a>
  <button class="dropdown-btn">Dropdown 
    <i class="fa fa-caret-down"></i>
  </button>
  <div class="dropdown-container">
    <a href="#">Link 1</a>
    <a href="#">Link 2</a>
    <a href="#">Link 3</a>
  </div>
  <button class="dropdown-btn">Dropdown 
    <i class="fa fa-caret-down"></i>
  </button>
  <div class="dropdown-container">
    <a href="#">Link 1</a>
    <a href="#">Link 2</a>
    <a href="#">Link 3</a>
  </div>
  <a href="#contact">Search</a>
</div>

var accItem = document.getElementsByClassName('dropdown-container');
    var accHD = document.getElementsByClassName('dropdown-btn');
    for (i = 0; i < accHD.length; i++) {
        accHD[i].addEventListener('click', toggleItem, false);
    }
    function toggleItem() {

        var itemClass = this.nextElementSibling;
        for (i = 0; i < accItem.length; i++) {
                accItem[i].style.display = "none";
            accHD[i].classList.remove("active");
        }
        if (itemClass.style.display === "none") {
                this.classList.add("active");
            //this.classList.toggle("active");
            this.nextElementSibling.style.display = "block";
        }

    }

是否有人能够找到问题所在并解决它?
谢谢,问候

(希望清楚,如果没有,请在 cmets 中告诉我。我英语说得不太好。)

【问题讨论】:

    标签: javascript html drop-down-menu dropdown


    【解决方案1】:

    在你的 for 循环上方尝试添加:

    if (itemClass.style.display === "block") {
        this.nextElementSibling.style.display = "none";
        this.classList.remove("active");
        return;
    }
    

    这将检查单击的项目是否已打开并处理设置所有值。通过添加返回,它将阻止执行其余代码。

    这是您的代码的一个小技巧,并回答了您关于单击其中一个主要链接关闭它们的其他问题:

    fiddle

    【讨论】:

    • 不错的答案,它有效!如果我单击一个按钮(“普通”按钮,而不是下拉按钮),您是否也可以这样做,下拉菜单会自行关闭?谢谢!
    • 全部折叠按钮是什么意思?
    • 不完全是。如果您看到演示 here,想象下拉菜单已打开,然后单击 About/Services/Client/... 按钮。我希望当您单击这些按钮(关于、服务等,而不是“下拉”按钮)时,下拉菜单会折叠。希望我的解释清楚
    • 添加了一个我觉得你正在寻找的东西。
    • 简直完美!非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-24
    相关资源
    最近更新 更多