95 votes

Comment masquer le menu déroulant de Twitter Bootstrap

Cela devient ennuyeux : lorsque je clique sur un élément d'une liste déroulante Bootstrap, la liste déroulante ne se ferme pas. Je l'ai configuré pour ouvrir une boîte à lumière Facebox lorsque vous cliquez sur l'élément de la liste déroulante, mais il y a un problème avec cela.

enter image description here


Ce que j'ai essayé

Lorsque l'élément est cliqué, j'ai essayé de faire ceci :

    $('.dropdown.open').removeClass('open');
    $('.dropdown-menu').hide();

Ça le cache, mais ensuite, pour une raison quelconque, il ne s'ouvre plus.

Comme vous pouvez le voir, j'ai vraiment besoin que la liste déroulante se ferme, parce qu'elle a l'air merdique lorsqu'elle reste ouverte (principalement parce que l'image de la liste déroulante n'est pas visible). z-index de la liste déroulante est plus élevé que le recouvrement de la boîte modale Facebox.


Pourquoi je n'utilise pas la boîte modale intégrée de Bootstrap

Si vous vous demandez pourquoi je n'utilise pas la jolie boîte modale intégré à Bootstrap c'est parce que :

  1. Il n'y a pas de moyen de charger du contenu avec AJAX.
  2. Vous devez taper du HTML à chaque fois pour la modale ; avec Facebox vous pouvez faire un simple : $.facebox({ajax:'/assets/ajax/dialogs/dialog?type=block-user&id=1234567'});
  3. Il utilise des animations CSS3 pour s'animer (ce qui est très joli), mais dans les navigateurs non CSS3, il se contente de s'afficher, ce qui n'est pas très joli. Facebox utilise JavaScript pour s'afficher en fondu et fonctionne donc dans tous les navigateurs.

178voto

Bart Wegrzyn Points 1099

Essayez ça :

$('.dropdown.open .dropdown-toggle').dropdown('toggle');

Cela peut aussi fonctionner pour vous :

$('[data-toggle="dropdown"]').parent().removeClass('open');

0 votes

J'ai mis à jour le code. Essayez à nouveau, s'il vous plaît. J'ai essayé sur des listes déroulantes ouvertes et elles se sont bien fermées. Je pouvais également les rouvrir par la suite.

0 votes

Ça n'a toujours pas marché. Voici mon code : dl.dropbox.com/u/25819920/Screenshots/ #block_user est l'élément de la liste déroulante. J'ai également essayé sans la virgule dans le sélecteur comme votre code l'est mais aucun des deux ne fonctionne.

3 votes

J'ai ajouté une autre méthode qui pourrait vous convenir. Si ce n'est pas le cas, vérifiez que la classe "open" est attribuée à l'élément div.btn-group qui contient votre bouton.

27voto

VeXii Points 1447

J'ai essayé la plupart des options proposées ici mais aucune d'entre elles n'a vraiment fonctionné pour moi. (le $('.dropdown.open').removeClass('open'); le cachait, mais si vous passiez la souris dessus avant de cliquer sur autre chose, il réapparaissait.

alors j'ai fini par le faire avec un $("body").trigger("click")

0 votes

C'est aussi une bonne façon de faire ! Ainsi, lorsque vous cliquez virtuellement sur le <body> il ferme le menu déroulant ?

4 votes

Oui, la liste déroulante écoute les événements de clic de l'utilisateur en dehors du menu :)

1 votes

@VeXii oui, et c'est la raison pour laquelle il ne se ferme pas sur les appareils mobiles. J'espère que la nouvelle version 3 de bootstrap ("mobile first") corrigera ce problème.

11voto

user2483318 Points 1
$('.open').removeClass('open');

Bootstrap 4 (octobre 2018) :

$('.show').removeClass('show');

0 votes

Je pense que c'est vraiment la solution la plus simple, sauf qu'avec Bootstrap 4, vous utilisez la classe "show".

6voto

Gurinder Points 41

Il vous suffit de faire $('.dropdown.open').removeClass('open'); supprimer la deuxième ligne qui masque le menu déroulant.

2 votes

Mais cela ne changera pas l'attribut aria.

4voto

scolja Points 145

La réponse sélectionnée n'a pas fonctionné pour moi, mais je pense que c'est à cause de la nouvelle version de Bootstrap. J'ai fini par écrire ceci :

$('.btn-navbar').addClass('collapsed');
$('.nav-collapse').removeClass('in').css('height', '0');

J'espère que ça aidera quelqu'un d'autre à l'avenir.

0 votes

Merci pour la réponse. Je crois que je suis toujours sur Bootstrap 2.2.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X