2

How can you collapse the menu of a Bootstrap burger when you click on a scrollspy link?

When viewing my website on a smartphone, the bootstrap nav is reduced to a burger menu. If you click on a link that leads to a specific place in my index.html (such as #aboutMe) and not to an external page, then the navigation remains unfolded. I want it to collapse again afterwards.

You can view the code on: https://github.com/senkvalentin/personal_page or visit the website on: https://senkvalentin.com/

Here is a part of my html:

.h-100vh{
  height:100vh;
}
<script src="https://code.jquery.com/jquery-latest.js"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/js/bootstrap.bundle.min.js"></script>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet" />
<div data-spy="scroll" data-target=".navbar" data-offset="50">
  <div class="container">
    <div class="row">
      <nav class="navbar fixed-top navbar navbar-expand-lg navbar-light bg-light">
        <div class="container-fluid">
          <a class="navbar-brand" href="/"><img src="./img/logo.png" alt="">
          </a>
          <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
                <span class="navbar-toggler-icon"></span>
              </button>

          <div class="collapse navbar-collapse" id="navbarSupportedContent">
            <ul class="navbar-nav me-auto mb-2 mb-lg-0">
              <li class="nav-item">
                <a class="nav-link" aria-current="page" href="#home">Home</a>
              </li>
              <li class="nav-item">
                <a class="nav-link" href="#aboutMe">About</a>
              </li>
              <li class="nav-item">
                <a class="nav-link" aria-current="page" href="#projectsList">Projects</a>
              </li>
              <li class="nav-item dropdown">
                <a class="nav-link dropdown-toggle" href="#" id="navbarDropdown" role="button" data-bs-toggle="dropdown" aria-expanded="false">
                      Admin
                    </a>
                <ul class="dropdown-menu" aria-labelledby="navbarDropdown">
                  <li><a class="dropdown-item" href="!#" target="_blank">Server - Info</a></li>
                  <li><a class="dropdown-item" href="#" target="_blank">Mail - Server</a></li>
                  <li><a class="dropdown-item" href="#" target="_blank">Mail - Server</a></li>
                  <li><a class="dropdown-item" href="!#" target="_blank">Cloud - Server</a></li>
                </ul>
              </li>
            </ul>
          </div>
        </div>
      </nav>
    </div>
    <div id="home" class="h-100vh bg-warning">Home</div> 
    <div id="aboutMe" class="h-100vh bg-success">About Me</div>
    <div id="projectsList" class="h-100vh bg-primary">Project</div>

I already looked at: How to hide collapsible Bootstrap navbar on click
And: Bootstrap panel-collapse collapses when you click on a link inside it is clicked

but nothing worked.

I'm using the latest version of jQuery and Bootstrap version 5.0.1:

<script src="https://code.jquery.com/jquery-latest.js"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.1/dist/js/bootstrap.bundle.min.js" integrity="sha384-gtEjrD/SeCtmISkJkNUaaKMoLD0//ElJ19smozuHV6z3Iehds+3Ulb9Bn9Plx0x4" crossorigin="anonymous"></script>
BSMP
  • 4,596
  • 8
  • 33
  • 44

2 Answers2

1

In Jquery simply trigger click on the navbar-toggler button when link is clicked

$('.nav-link').click(function(){
  $('.navbar-toggler').click();
});

$('.nav-link').click(function(){
  $('.navbar-toggler').click();
});
.h-100vh{
  height:100vh;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/js/bootstrap.bundle.min.js"></script>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet" />
<div data-spy="scroll" data-target=".navbar" data-offset="50">
  <div class="container">
    <div class="row">
      <nav class="navbar fixed-top navbar navbar-expand-lg navbar-light bg-light">
        <div class="container-fluid">
          <a class="navbar-brand" href="/"><img src="./img/logo.png" alt="">
          </a>
          <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
                <span class="navbar-toggler-icon"></span>
              </button>

          <div class="collapse navbar-collapse" id="navbarSupportedContent">
            <ul class="navbar-nav me-auto mb-2 mb-lg-0">
              <li class="nav-item">
                <a class="nav-link" aria-current="page" href="#home">Home</a>
              </li>
              <li class="nav-item">
                <a class="nav-link" href="#aboutMe">About</a>
              </li>
              <li class="nav-item">
                <a class="nav-link" aria-current="page" href="#projectsList">Projects</a>
              </li>
              <li class="nav-item dropdown">
                <a class="nav-link dropdown-toggle" href="#" id="navbarDropdown" role="button" data-bs-toggle="dropdown" aria-expanded="false">
                      Admin
                    </a>
                <ul class="dropdown-menu" aria-labelledby="navbarDropdown">
                  <li><a class="dropdown-item" href="!#" target="_blank">Server - Info</a></li>
                  <li><a class="dropdown-item" href="#" target="_blank">Mail - Server</a></li>
                  <li><a class="dropdown-item" href="#" target="_blank">Mail - Server</a></li>
                  <li><a class="dropdown-item" href="!#" target="_blank">Cloud - Server</a></li>
                </ul>
              </li>
            </ul>
          </div>
        </div>
      </nav>
    </div>
    <div id="home" class="h-100vh bg-warning">Home</div> 
    <div id="aboutMe" class="h-100vh bg-success">About Me</div>
    <div id="projectsList" class="h-100vh bg-primary">Project</div>
Amal nandan
  • 932
  • 6
  • 17
1

You first need to select all .nav-link excluding .dropdown-toggle.
Then, assign an event listener to toggle the .navbar-collapse on click:

$(document).ready(() => {
  let $navlinks = $('.nav-link').not('.dropdown-toggle');
  // console.log($navlinks)
  $navlinks.click((e) => {
    $(e.target).closest('.navbar').find('.navbar-collapse').collapse('toggle')
  })
})
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.1/dist/css/bootstrap.css">

<div data-spy="scroll" data-target=".navbar" data-offset="50">
  <div class="container">
    <div class="row">
      <nav class="navbar fixed-top navbar navbar-expand-lg navbar-light bg-light">
        <div class="container-fluid">
          <a class="navbar-brand" href="/"><img src="./img/logo.png" alt="logo">
          </a>
          <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
            <span class="navbar-toggler-icon"></span>
          </button>

          <div class="collapse navbar-collapse" id="navbarSupportedContent">
            <ul class="navbar-nav me-auto mb-2 mb-lg-0">
              <li class="nav-item">
                <a class="nav-link" aria-current="page" href="/">Home</a>
              </li>
              <li class="nav-item">
                <a class="nav-link" href="#aboutMe">About</a>
              </li>
              <li class="nav-item">
                <a class="nav-link" aria-current="page" href="#projectsList">Projects</a>
              </li>
              <li class="nav-item dropdown">
                <a class="nav-link dropdown-toggle" href="#" id="navbarDropdown" role="button" data-bs-toggle="dropdown" aria-expanded="false">
                  Admin
                </a>
                <ul class="dropdown-menu" aria-labelledby="navbarDropdown">
                  <li><a class="dropdown-item" href="!#" target="_blank">Server - Info</a></li>
                  <li><a class="dropdown-item" href="#" target="_blank">Mail - Server</a></li>
                  <li><a class="dropdown-item" href="#" target="_blank">Mail - Server</a></li>
                  <li><a class="dropdown-item" href="!#" target="_blank">Cloud - Server</a></li>
                </ul>
              </li>
            </ul>
          </div>
        </div>
      </nav>
    </div>

    <script src="https://code.jquery.com/jquery-latest.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.1/dist/js/bootstrap.bundle.min.js" integrity="sha384-gtEjrD/SeCtmISkJkNUaaKMoLD0//ElJ19smozuHV6z3Iehds+3Ulb9Bn9Plx0x4" crossorigin="anonymous"></script>
Arleigh Hix
  • 9,990
  • 1
  • 14
  • 31