Garder Bootstrap Déroulante Ouvrir Lorsque Vous Cliquez Dessus Off
Si la liste déroulante est visible, et que je clique en dehors de la liste déroulante de la ferme. J'en ai besoin pour ne pas fermer.
À partir de la documentation:
Lors de l'ouverture, le plugin ajoute également .déroulant-toile de fond comme une zone de clic pour fermer les menus déroulants lorsque vous cliquez en dehors du menu.
Du JavaScript que je peux ajouter à prévenir la chute vers le bas à partir de la fermeture?
InformationsquelleAutor kleban | 2013-11-02
Vous devez vous connecter pour publier un commentaire.
De la section événements de la Bootstrap
liste déroulante
documentation:Pour commencer, afin de prévenir le menu déroulant à partir de la fermeture, il suffit d'écouter cet événement et l'empêcher de procéder par renvoi de
false
:Pour une solution complète, vous voulez probablement pour l'autoriser à se fermer lorsque la liste déroulante lui-même est cliqué. Si seulement de temps en temps, nous voulons empêcher la fermeture du boîtier.
Pour ce faire, nous allons mettre en
.de données()
des drapeaux dans les deux autres événements déclenchés par la liste déroulante:shown.bs.dropdown
- Lorsque indiqué, nous allons mettre en.data('closable')
àfalse
click
- Quand on clique dessus, nous allons mettre en.data('closable')
àtrue
Ainsi, si le
hide.bs.dropdown
événement a été soulevée par unclick
sur la liste déroulante, nous allons permettre à un proche.Démonstration en direct dans jsFiddle
JavaScript
HTML (remarque j'ai ajouté de la classe
keep-open
de la liste déroulante)you probably want to allow it to close when the dropdown itself is clicked
, j'ai donc mis en place une plus compliqué solution pour y parvenir."hide.bs.dropdown": function() { return (this.closable===true); }
.find('.dropdown-toggle').dropdown('toggle')
après l'initialisation de la des auditeurs pour déclencher la liste déroulante à partir de l'ouverture. Tous les autres auditeurs peuvent rester exactement comme il est. Démo en jsFiddleVersion des changements dans une dépendance ont causé KyleMit, et la plupart des autres solutions ne fonctionnent plus. J'ai creusé un peu plus loin et que, pour une raison
click()
est envoyé lors de Bootstrap tente et échouehide.bs.dropdown
, suivi par un autre appel àhide.bs.dropdown
. J'ai eu autour de ce problème en forçant la fermetureclick()
de se produire sur le bouton lui-même, et non le menu déroulant.Démonstration en direct dans Bootply
JavaScript
HTML
JS:
CSS:
HTML:
J'ai trouvé une solution qui ne nécessite pas de nouvelles js. Ne pas utiliser une liste déroulante et d'utiliser bootstrap effondrement à la place. - Je encore utiliser certains déroulante des classes de style, comme une liste déroulante.
J'ai réussi à utiliser une combinaison de KyleMitt la solution ci-dessus et a couru dans des problèmes lors de l'utilisation de ce dans une Footable objet (je crois que c'est en raison de la dynamique de la création de la table). J'ai appliqué .gardez-ouvert à l' .liste déroulante .div au plus haut niveau.
La fonctionnalité de ce code vous permet de cliquer en dehors de fermer la liste déroulante, mais en cliquant sur les éléments à l'intérieur il continuera de l'être ouverte. S'il vous plaît laissez-moi savoir si vous avez des suggestions ou des commentaires sur ce sujet et je vais essayer de les modifier.
Autre solution pour ce. Garder déroulante ouverte après le clic à l'intérieur .dropdown-menu:
Garder déroulante ouverte après le clic à l'intérieur .dropdown-menu
Mike Kane solution travaillé la plupart du temps, mais il y avait un cas où la
hide.bs.dropdown
événement était de tir avant leclick()
événement qui a causé la liste déroulante pour ne pas fermer quand il le fallait.Je suis venu avec une autre méthode qui vérifie la
clickEvent
objet dans l'événement. Mon plan initial était d'aller jusqu'à la DOM et vérifier que leclickEvent
cible était ou n'était pas un enfant de la liste déroulante, mais a constaté que si vous cliquez à l'intérieur de la liste déroulanteclickEvent
est pas défini, et si vous cliquez en dehors de cela, l'événement est un objet.Donc c'est juste une façon simple de vérifier si le
clickEvent
existe en tant qu'objet.