Bootstrap 在主下拉关闭时关闭子下拉

Bootstrap Close Subdropdown on main dropdown closure

我目前正在 ASP.NET 应用程序的 bootstrap 菜单上工作。为此,我自己做了一个导航栏,当我点击按钮时,它会显示这样的菜单:

我想要并且工作得很好(所有代码将在稍后)。然后我想创建一些子菜单,当我点击第二个选项时会出现这些子菜单:"Fiche"。所以经过一些研究,我发现我可以像这样使用 bootstrap 导航栏来做到这一点:

这几乎就是我想要的! (除了它很丑而且我不知道如何让它看起来更好,但这是另一个问题。) 但是我想要的是,当我点击菜单以外的其他地方时,所有菜单都会消失,当我再次点击打开它时,它不会再次显示我之前打开的子菜单(基本上,我想关闭所有).

这部分...不起作用,首先是因为它会关闭使用 .attr 并尝试手动删除 bootstrap 属性,但这似乎不是一个好方法。所以我将 post 实际代码,除了子菜单关闭外,它大致可以工作(另外,我对这个社区很陌生,我仍在测试如何做一个正确的 post,所以希望我已经提供了足够的信息)在代码片段上它似乎不起作用,可能是因为 bootstrap 湖导致我的配置不同:

function myFunction() {
    document.getElementById("myDropdown").classList.toggle("show");
}

// Close the dropdown menu if the user clicks outside of it
window.onclick = function (event) {
    if (!event.target.matches('.immune-nav-close')) {
        var dropdowns = document.getElementsByClassName("dropdown-content");
        var i;
        for (i = 0; i < dropdowns.length; i++) {
            var openDropdown = dropdowns[i];
            if (openDropdown.classList.contains('show')) {
                openDropdown.classList.remove('show');
            }
        }
    }
}
.well
{
    background-color: #219cdc !important;
}

.top-navbar
{
 background-color: #00448a;
 width: 100%;
 height: 60px;
    padding-top: 15px;
}
    
.menu-btn
{
 margin-left: 2%;
 height: 75%;
 width: 40px;
 max-width: 40px;
 display: inline-block;
}
   
.span-menu
{
 width: 100%;
 height: 20%;
 margin-bottom:10%;
 background-color: white;
 border-radius: 5px;
}
   
.dropdown-content 
{
 display: none;
 position: absolute;
 background-color: #219cdc;
 min-width: 160px;
 box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);
 color: white;
 border-radius: 5px;
 top: 60px;
    z-index: 1000 !important;
}
   
.dropdown-content a 
{
 color: white;
 padding: 12px 16px;
 text-decoration: none;
 display: block;
}
   
.dropdown-content a:hover {color: black; background-color:white;}
   
.show {display:block;}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<nav class="top-navbar">
   <a class="menu-btn immune-nav-close" href="javascript:void(0);" style="font-size:15px;" onclick="myFunction()">
    <div class="span-menu immune-nav-close"></div>
    <div class="span-menu immune-nav-close"></div>
    <div class="span-menu immune-nav-close"></div>
   </a>
   <div id="myDropdown" class="dropdown-content">
    <a href="/Default.aspx">Accueil</a>
    <a class="immune-nav-close" data-toggle="collapse" href="#collapseFiche" aria-expanded="false" aria-controls="collapseFiche">
                    Fiches
                </a>
                <div class="collapse ddown-nav" id="collapseFiche">
                    <div class="well">
                      <a href="/SaisieFiche.aspx">Saisir une fiche</a>
                      <a href="/MyFiches.aspx">Mes fiches</a>
                    </div>
                </div>
    <a href="/Approbation.aspx">Approbations</a>
                <a href="/Validation.aspx">Validation RH</a>
                <a class="immune-nav-close" data-toggle="collapse" href="#collapseExport" aria-expanded="false" aria-controls="collapseExport">
                    Exportations
                </a>
                <div class="collapse ddown-nav" id="collapseExport">
                    <div class="well">
                        <a href="/Synthese.aspx">Synthèse</a>
                        <a href="/Monthly.aspx">Bilan Mensuel</a>
                        <a href="/Personnal.aspx">Bilan Personnel</a>
                    </div>
                </div>
                <a class="immune-nav-close" data-toggle="collapse" href="#collapseSetting" aria-expanded="false" aria-controls="collapseSetting">
                    Configuration
                </a>
                <div class="collapse ddown-nav" id="collapseSetting">
                    <div class="well">
                        <a href="/Config_pays.aspx">Paramétrage Pays</a>
                        <a href="/Config_csp.aspx">Paramétrage Catégories Socio-Professionnelles</a>
                    </div>
                </div>
   </div>
        </nav>

如果需要更多信息,请随意询问!预先感谢您的帮助。

其实答案很"simple"但之前需要一些东西。

首先我遇到了一些 JS 版本问题,我希望它是正确的(因为我不能在我想要的元素上使用 .collapse)但后来我明白它必须应用于 <div> 加上内容崩溃等效果好多了!

所以我只需要将我的 javascript 替换为:

window.onclick = function (event) {
    if (!event.target.matches('.immune-nav-close')) {
        var dropdowns = document.getElementsByClassName("dropdown-content");
        var i;
        for (i = 0; i < dropdowns.length; i++) {
            var openDropdown = dropdowns[i];
            if (openDropdown.classList.contains('show')) {
                openDropdown.classList.remove('show');
            }
        }

        $('.ddown-nav').collapse('hide')
    }
}