Celui-ci fonctionne sur Bootstrap 4.3.1 .
Jsfiddle : https://jsfiddle.net/ko6L31w4/1/
Le code HTML peut être un peu désordonné parce que je crée un menu déroulant légèrement complexe pour un test complet, sinon tout est assez simple.
Js comprend moins de moyens de réduire les listes déroulantes ouvertes et CSS ne comprend que des styles minimaux pour toutes les fonctionnalités.
$(function() {
$("ul.dropdown-menu [data-toggle='dropdown']").on("click", function(event) {
event.preventDefault();
event.stopPropagation();
//method 1: remove show from sibilings and their children under your first parent
/* if (!$(this).next().hasClass('show')) {
$(this).parents('.dropdown-menu').first().find('.show').removeClass('show');
} */
//method 2: remove show from all siblings of all your parents
$(this).parents('.dropdown-submenu').siblings().find('.show').removeClass("show");
$(this).siblings().toggleClass("show");
//collapse all after nav is closed
$(this).parents('li.nav-item.dropdown.show').on('hidden.bs.dropdown', function(e) {
$('.dropdown-submenu .show').removeClass("show");
});
});
});
.dropdown-submenu {
position: relative;
}
.dropdown-submenu>.dropdown-menu {
top: 0;
left: 100%;
}
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script>
<nav class="navbar navbar-expand-md navbar-light bg-white py-3 shadow-sm">
<div class="container-fluid">
<a href="#" class="navbar-brand font-weight-bold">Multilevel Dropdown</a>
<button type="button" data-toggle="collapse" data-target="#navbarContent" aria-controls="navbars" aria-expanded="false" aria-label="Toggle navigation" class="navbar-toggler">
<span class="navbar-toggler-icon"></span>
</button>
<div id="navbarContent" class="collapse navbar-collapse">
<ul class="navbar-nav mr-auto">
<!-- nav dropdown -->
<li class="nav-item dropdown">
<a href="#" data-toggle="dropdown" class="nav-link dropdown-toggle">Dropdown</a>
<ul class="dropdown-menu">
<li><a href="#" class="dropdown-item">Some action</a></li>
<!-- lvl 1 dropdown -->
<li class="dropdown-submenu">
<a href="#" role="button" data-toggle="dropdown" class="dropdown-item dropdown-toggle">level 1</a>
<ul class="dropdown-menu">
<li><a href="#" class="dropdown-item">level 2</a></li>
<!-- lvl 2 dropdown -->
<li class="dropdown-submenu">
<a href="#" role="button" data-toggle="dropdown" class="dropdown-item dropdown-toggle">level 2</a>
<ul class="dropdown-menu">
<li><a href="#" class="dropdown-item">level 3</a></li>
<!-- lvl 3 dropdown -->
<li class="dropdown-submenu">
<a href="#" role="button" data-toggle="dropdown" class="dropdown-item dropdown-toggle">level 3</a>
<ul class="dropdown-menu">
<li><a href="#" class="dropdown-item">level 4</a></li>
</ul>
</li>
</ul>
</li>
<li><a href="#" class="dropdown-item">level 2</a></li>
<li><a href="#" class="dropdown-item">level 2</a></li>
</ul>
</li>
<li><a href="#" class="dropdown-item">Some other action</a></li>
<li class="dropdown-submenu">
<a href="#" role="button" data-toggle="dropdown" class="dropdown-item dropdown-toggle">level 1</a>
<ul class="dropdown-menu">
<li class="dropdown-submenu">
<a href="#" role="button" data-toggle="dropdown" class="dropdown-item dropdown-toggle">level 2</a>
<ul class="dropdown-menu">
<li><a href="#" class="dropdown-item">level 3</a></li>
<li><a href="#" class="dropdown-item">level 3</a></li>
</ul>
</li>
<li class="dropdown-submenu">
<a href="#" role="button" data-toggle="dropdown" class="dropdown-item dropdown-toggle">level 2</a>
<ul class="dropdown-menu">
<li><a href="#" class="dropdown-item">level 3</a></li>
<li><a href="#" class="dropdown-item">level 3</a></li>
</ul>
</li>
<li><a href="#" class="dropdown-item">level 2</a></li>
<li class="dropdown-submenu">
<a href="#" role="button" data-toggle="dropdown" class="dropdown-item dropdown-toggle">level 2</a>
<ul class="dropdown-menu">
<li><a href="#" class="dropdown-item">level 3</a></li>
<li><a href="#" class="dropdown-item">level 3</a></li>
</ul>
</li>
<li><a href="#" class="dropdown-item">level 2</a></li>
</ul>
</li>
</ul>
</li>
<li class="nav-item"><a href="#" class="nav-link">About</a></li>
<li class="nav-item"><a href="#" class="nav-link">Services</a></li>
<li class="nav-item"><a href="#" class="nav-link">Contact</a></li>
</ul>
</div>
</div>
</nav>
0 votes
On dirait que ça marche pour moi. Que voulez-vous qu'il se passe à la place ?
0 votes
Vous voulez dire que cela fonctionne lorsque vous incluez simplement la liste déroulante à l'intérieur d'une liste déroulante ? @MichaelCoker
0 votes
Je veux dire que le code que vous avez posté semble fonctionner comme prévu. Je ne vois rien d'anormal.
0 votes
@MichaelCoker C'est vrai, sur une version mobile oui. Mais essayez d'ouvrir l'extrait en plein écran. J'ai besoin de la liste déroulante à plusieurs niveaux.
0 votes
Je ne sais toujours pas quel est le problème. La liste déroulante fonctionne également lorsque la barre de navigation est visible en plein écran.
0 votes
@MichaelCoker J'ai besoin d'une liste déroulante à l'intérieur d'une liste déroulante. Ainsi, lorsqu'ils ouvrent une première liste déroulante et survolent un lien à l'intérieur de celle-ci, une autre liste déroulante apparaît. Comme un deuxième niveau. Désolé si je ne l'ai pas assez bien expliqué.
0 votes
Ah, je t'ai eu. Je pense que tu devrais juste écrire ton propre code. Selon Mark Otto, "les dropdowns imbriqués ne sont pas supportés et ne le sont plus depuis la v3". github.com/twbs/bootstrap/issues/21026
0 votes
Bootstrap aurait dû inclure cette fonction par défaut.
0 votes
@Retros Pourriez-vous s'il vous plaît vérifier cela avec
Bootstrap-5
stackoverflow.com/q/66092625/13919505 ne fonctionne pas avecBootstrap-5
ne ferme pas le sidenav en cliquant sur un autre nav-dropdown0 votes
@Retros soit le lien ci-dessus ou celui-ci stackoverflow.com/q/66098848/13919505 Veuillez vérifier, il y a des milliers de développeurs qui sont confrontés à ce problème avec Bootstrap 5, qui ne fonctionne pas bien avec des listes déroulantes multiples.