简体   繁体   中英

Bootstrap: nav-link does not get hidden when dropdown-item is selected

Following is what I would like to achieve - when a dropdown-item from navbar gets selected, complete BOTH of the following 2 actions:

  • Go to the div with the target id
  • Roll up the navbar to the initial state (hide it back to the fully rolled upstate)

As it turns out, I was able to do only one or the other, but not both. Could someone please help provide guidance on how I can achieve both points? I believe that the first dropdown-item anchor should do it, but, for some reason, it doesn't go to the targetId after it rolls up the navbar. The anchor takes me to the target only if I remove the data-toggle="collapse" and data-target=".navbar-collapse.show" , which is what the second anchor shows, but then the navbar doesn't roll up.

 <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css"> <nav class="navbar navbar-dark bg-dark fixed-top"> <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarsExampleDefault" aria-controls="navbarsExampleDefault" aria-expanded="false" aria-label="Toggle navigation"> <span class="navbar-toggler-icon"></span> </button> <div class="collapse navbar-collapse" id="navbarsExampleDefault"> <ul class="navbar-nav mr-auto"> <li class="nav-item dropdown"> <a class="nav-link dropdown-toggle" href="" id="dropdown01" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Menu</a> <div class="dropdown-menu shadow rounded" aria-labelledby="dropdown01"> <a class="dropdown-item" href="#targetId" data-toggle="collapse" data-target=".navbar-collapse.show">nav-link does get hidden, but it doesn't hit the target</a> <a class="dropdown-item" href="#targetId">Hits the target, but the nav-link does not get hidden</a> </div> </li> </ul> </div> </nav> <:-- navbar ends here --> <div id="targetId">Content</div> <script src="https.//code.jquery.com/jquery-3.4.1.slim.min:js"></script> <script src="https.//cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min:js"></script> <script src="https.//stackpath.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.min.js"></script>

Thanks so much for your help, I appreciate it!

You can use Javascript for that.

 document.querySelectorAll('.custom_collapse').forEach(cur => { cur.addEventListener('click', () => { document.querySelector('.navbar_collapse').classList.remove('show'); }); });
 #targetId { /* JUST FOR SEE TARGET */ margin-top: 120vh; }
 <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css"> <nav class="navbar navbar-dark bg-dark fixed-top"> <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarsExampleDefault" aria-controls="navbarsExampleDefault" aria-expanded="false" aria-label="Toggle navigation"> <span class="navbar-toggler-icon"></span> </button> <div class="collapse navbar-collapse navbar_collapse" id="navbarsExampleDefault"> <ul class="navbar-nav mr-auto"> <li class="nav-item dropdown"> <a class="nav-link dropdown-toggle" href="#" id="dropdown01" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Menu</a> <div class="dropdown-menu shadow rounded" aria-labelledby="dropdown01"> <a class="dropdown-item custom_collapse" href="#targetId">nav-link does get hidden, but it doesn't hit the target</a> <a class="dropdown-item custom_collapse" href="#targetId">Hits the target, but the nav-link does not get hidden</a> </div> </li> </ul> </div> </nav> <:-- navbar ends here --> <div id="targetId">Content</div> <script src="https.//code.jquery.com/jquery-3.4.1.slim.min:js"></script> <script src="https.//cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min:js"></script> <script src="https.//stackpath.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.min.js"></script>

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM