Comment faire pour fermer et ouvrir un s'est effondré barre de navigation lorsque vous cliquez à l'extérieur de la barre de navigation de l'élément dans le Bootstrap 3?
Comment puis-je fermer et ouvrir un s'est effondré barre de navigation en cliquant sur l'extérieur de la barre de navigation élément? Actuellement, le seul moyen de l'ouvrir ou de le fermer en cliquant sur la navbar-toggle
bouton.
Voir ici pour un exemple de code et de:
Jusqu'à présent, j'ai essayé ce qui suit, qui ne semble pas fonctionner:
jQuery(document).click(function() {
});
jQuery('.navbar').click(function(event) {
jQuery(".navbar-collapse").collapse('hide');
event.stopPropagation();
});
- Le "cassé" dans la démo se termine quand je cliquez en dehors du menu; ce qui est cassé?
- J'ai mis à jour ma question avec ce que j'ai essayé.
- ce lien brisé faites-vous allusion? Je n'en vois pas.
- Je suppose qu'il veut dire le 'hamburger' élément ouvre le menu à la largeur appropriée et en re-cliquant sur la ferme. Je suppose qu'il veut la même "proche" de prendre place lorsque vous cliquez sur n'importe où.
- Donc, il vous suffit de sélectionner le
body
dans votre fonction JQuery devrait le faire, en supposant que de vérifier pour voir si LE MENU EST OUVERT. - La vérification pour voir si le menu est ouvert est la partie que je suis aux prises avec. Actuellement, le menu s'ouvre et se ferme quand je clique en dehors de la barre de navigation de l'élément. J'aimerais qu'il vient de refermer S'il est déjà ouvert
Vous devez vous connecter pour publier un commentaire.
Ont un regard qui:
Votre violon fonctionne avec: http://jsfiddle.net/52VtD/5718/
Ses une version modifiée de cette réponse, qui manque de l'animation et de l'est également un petit peu plus compliqué.
Je sais, en invoquant la
click()
n'est pas très élégant, maiscollapse('hide')
ne fonctionne pas pour moi non plus, et je pense que l'animation est un peu plus agréable que l'ajout et la suppression des classes à peine.collapse('hide)
ne fonctionne pas. Cette solution fonctionne parfaitement bien.this.eventAggregator.subscribe('router:navigation:success', response => { jQuery("navigation button.navbar-toggle").click(); });
click()
va travailler sur les mobiles, où ce menu est utilisé.Accepté la réponse ne semble pas fonctionner correctement. Il a seulement besoin de vérifier si "navbar-effondrement" a le "in" de la classe. Nous pouvons alors le feu de l'effondrement de la méthode comme prévu par l'utilisation de notre référence pour la barre de navigation.
À l'aide de ce qui fonctionne pour moi.
La solution que j'ai décidé d'utiliser a été prise à partir de la accepté de répondre ici et de cette réponse
Ce cache une ouverture s'est effondré nav menu si l'utilisateur clique n'importe où en dehors de la
.navbar
élément. Bien sûr, en cliquant sur.navbar-toggle
travaille toujours pour fermer le menu aussi.body
àhtml
de compte pour les grands appareils ou des pages avec peu de contenu. Le corps de la hauteur correspond au contenu plutôt que sur le visible zone de l'écran, donc si vous avez une page avec peu de contenu, de robinetterie, dessous de la zone de contenu ne se déclenche pas. Sinon, une grande réponse et fonctionne vraiment bien, même avec la barre de navigation sous-menus.stopPropagation()
n'est pas toujours la meilleure solution. Mais plutôt quelque chose comme:Je pense qu'il est dangereux de supposer que vous ne voulez jamais à l'écoute de tout autre événement de la
.navbar
. Ce qui est impossible si vous utilisezstopPropagation()
..navbar
est à peu près l'ensemble du document dans le violon. J'ai mis à jour ma réponsenavbar-toggle
Converti nozzleman réponse pour Bootstrap 4(.3.1):
Placé dans le ngOnInit().
Lorsque le document est chargé, ce code attend cliquez sur événements. Si le mobile menu déroulant est ouvert (c'est à dire la réductible partie de la barre de navigation a le "spectacle" de la classe) et de l'objet cliqué (cible) n'est pas le mobile bouton menu (c'est à dire ne pas avoir la "navbar-activation /désactivation" de la classe), puis nous dire le mobile bouton menu il a été cliqué, et le menu se ferme.
J'ai ajouté une condition à @nozzleman la réponse pour vérifier si la appuyez ou cliquez sur a été faite sur un élément dans le menu, et si c'est le cas, ne pas le réduire.
J'ai eu un scénario où j'ai eu la non-liens et je ne voulais pas que le panneau de fermer si un utilisateur clique sur l'un de ces éléments sur les accidents. Les autres réponses ici sera fermer le panneau, même si vous cliquez sur le texte d'un élément qui n'est pas un lien.
Pour corriger ce que j'ai ajouté sur Paul Tarr réponse par emballage de la solution à une vérification pour voir si oui ou non le clic s'est produit n'importe où à l'intérieur de la
Le code devient:
Dans ce démo de violon vous pouvez voir que si vous cliquez sur un non-lien à l'intérieur du panneau, il ne sera pas le réduire.
Pour Bootstrap 4
Bootstrap 4 n'a pas de
in
classe. C'est Coffeescript.Donc, en gros, à moins que vous cliquez sur le bouton ou le menu fermer le menu.
Remarque: Étrange, sur iOS en cliquant sur le texte, à ne pas s'inscrire à un événement de clic, ni un événement mouseup. Cliquez sur une image pour ne déclencher des événements bien.
Pour Bootstrap 4: