Pouvons-nous faire en sorte que les popovers soient licenciables de la même manière que les modaux, c'est-à-dire. les faire se fermer lorsque l'utilisateur clique quelque part en dehors d'eux?
Malheureusement, je ne peux pas simplement utiliser du vrai modal au lieu du popover, car modal signifie position: fixe et ce ne serait plus un popover. :(
twitter-bootstrap
popover
Ante Vrli
la source
la source
data-trigger="hover"
etdata-trigger="focus"
sont une alternative intégrée pour fermer le popover, si vous ne souhaitez pas utiliser la bascule. À mon avis,data-trigger="hover"
offre la meilleure expérience utilisateur ... il n'est pas nécessaire d'écrire du code .js supplémentaire ...Réponses:
Mise à jour: une solution légèrement plus robuste: http://jsfiddle.net/mattdlockyer/C5GBU/72/
Pour les boutons contenant uniquement du texte:
Pour les boutons contenant des icônes (ce code a un bogue dans Bootstrap 3.3.6, voir le correctif ci-dessous dans cette réponse)
Pour les popovers générés par JS, utilisez
'[data-original-title]'
à la place de'[data-toggle="popover"]'
Avertissement: la solution ci-dessus permet d'ouvrir plusieurs fenêtres pop-up à la fois.
Un popover à la fois s'il vous plaît:
Mise à jour: Bootstrap 3.0.x, voir code ou violon http://jsfiddle.net/mattdlockyer/C5GBU/2/
Cela gère la fermeture des fenêtres pop-up déjà ouvertes et non cliquées ou leurs liens n'ont pas été cliqués.
Mise à jour: Bootstrap 3.3.6, voir violon
Résout le problème où après la fermeture, prend 2 clics pour rouvrir
Mise à jour: En utilisant le conditionnel de l'amélioration précédente, cette solution a été réalisée. Résoudre le problème du double clic et de la popover fantôme:
la source
$(document)
au lieu de$('body')
car parfois lebody
ne s'étend pas sur toute la page.'[data-toggle="popover"]'
, qui ne fonctionne pas avec les popovers générés par JavaScript, j'ai utilisé'[data-original-title]'
comme sélecteur.Cela ferme tous les popovers si vous cliquez n'importe où sauf sur un popover
MISE À JOUR pour Bootstrap 4.1
la source
La version la plus simple, la plus sûre , fonctionne avec n'importe quelle version d'amorçage.
Démo: http://jsfiddle.net/guya/24mmM/
Démo 2: Ne pas ignorer en cliquant à l'intérieur du contenu popover http://jsfiddle.net/guya/fjZja/
Démo 3: plusieurs popovers: http://jsfiddle.net/guya/6YCjW/
Le simple fait d'appeler cette ligne supprimera tous les popovers:
Ignorez tous les popovers lorsque vous cliquez à l'extérieur avec ce code:
L'extrait ci-dessus attache un événement de clic sur le corps. Lorsque l'utilisateur clique sur un popover, il se comportera normalement. Lorsque l'utilisateur clique sur quelque chose qui n'est pas un popover, il ferme tous les popovers.
Cela fonctionnera également avec les popovers initiés avec Javascript, par opposition à d'autres exemples qui ne fonctionneront pas. (voir la démo)
Si vous ne voulez pas ignorer lorsque vous cliquez à l'intérieur du contenu du popover, utilisez ce code (voir le lien vers la 2e démo):
la source
!$(e.target).closest('.popover.in').length
serait peut -être plus efficace que!$(e.target).parents().is('.popover.in')
.Avec bootstrap 2.3.2, vous pouvez définir le déclencheur sur «focus» et cela fonctionne simplement:
la source
Ce n'est fondamentalement pas très complexe, mais il y a quelques vérifications à faire pour éviter les problèmes.
Démo (jsfiddle)
la source
popover()
clic plutôt que de survoler?stopPropagation()
l'événement transmis au gestionnaire de clics (sinon, le gestionnaire masquant masque immédiatement le popover). Démo (jsfiddle)Aucune des supposées solutions à vote élevé n'a fonctionné correctement pour moi. Chacun mène à un bug lorsque, après avoir ouvert et fermé (en cliquant sur d'autres éléments) le popover pour la première fois, il ne s'ouvre plus, jusqu'à ce que vous fassiez deux clics sur le lien de déclenchement au lieu d'un.
Je l'ai donc légèrement modifié:
la source
J'ai fait un jsfiddle pour vous montrer comment faire:
http://jsfiddle.net/3yHTH/
L'idée est d'afficher le popover lorsque vous cliquez sur le bouton et de masquer le popover lorsque vous cliquez en dehors du bouton.
HTML
JS
la source
jsfiddle bootstrap
et cela m'a donné le squelette de bootstrap css + js dans jsfiddle.ajoutez simplement cet attribut avec l'élément
la source
Cela a déjà été demandé ici . La même réponse que j'ai donnée alors s'applique toujours:
J'avais un besoin similaire et j'ai trouvé cette super petite extension du Twitter Bootstrap Popover de Lee Carmichael, appelée BootstrapX - clickover . Il a également quelques exemples d'utilisation ici . Fondamentalement, cela transformera le popover en un composant interactif qui se fermera lorsque vous cliquez ailleurs sur la page ou sur un bouton de fermeture dans le popover. Cela permettra également d'ouvrir plusieurs popovers à la fois et un tas d'autres fonctionnalités intéressantes.
la source
Il est tard pour la fête ... mais je pensais le partager. J'adore le popover mais il a si peu de fonctionnalités intégrées. J'ai écrit une extension bootstrap .bubble () qui est tout ce que j'aimerais que Popover soit. Quatre façons de rejeter. Cliquez à l'extérieur, basculez sur le lien, cliquez sur le X et appuyez sur échapper.
Il se positionne automatiquement pour ne jamais quitter la page.
https://github.com/Itumac/bootstrap-bubble
Ce n'est pas une auto promo gratuite ... J'ai saisi le code des autres tellement de fois dans ma vie, j'ai voulu offrir mes propres efforts. Donnez-lui un tourbillon et voyez si cela fonctionne pour vous.
la source
Selon http://getbootstrap.com/javascript/#popovers ,
Utilisez le déclencheur de focus pour fermer les fenêtres pop-up au prochain clic de l'utilisateur.
la source
<a>
balise, pas la<button>
balise, et vous devez également inclure lerole="button"
ettabindex
les attributs." L'avez-vous essayé avec ces spécifications?Solution acceptée modifiée. Ce que j'ai vécu, c'est qu'après que certains popovers aient été cachés, il faudrait les cliquer deux fois pour réapparaître. Voici ce que j'ai fait pour m'assurer que le popover ('hide') n'était pas appelé sur les popovers déjà cachés.
la source
Ajoutez simplement cet attribut à l'élément html pour fermer le popover au prochain clic.
référence de https://getbootstrap.com/docs/3.3/javascript/#popovers
la source
Cette solution fonctionne très bien:
la source
la source
Vous pouvez également utiliser le bullage d'événements pour supprimer la fenêtre contextuelle du DOM. C'est un peu sale, mais ça marche bien.
Dans votre html, ajoutez la classe .popover-close au contenu à l'intérieur du popover qui devrait fermer le popover.
la source
Il semble que la méthode 'hide' ne fonctionne pas si vous créez le popover avec délégation de sélecteur, à la place 'destroy' doit être utilisé.
Je l'ai fait fonctionner comme ça:
JSfiddle ici
la source
Nous avons découvert que nous avions un problème avec la solution de @mattdlockyer (merci pour la solution!). Lorsque vous utilisez la propriété selector pour le constructeur popover comme ceci ...
... la solution proposée pour BS3 ne fonctionnera pas. Au lieu de cela, il crée une seconde instance popover locale à son
$(this)
. Voici notre solution pour éviter cela:Comme mentionné, le
$(this).popover('hide');
créera une deuxième instance en raison de l'auditeur délégué. La solution fournie ne cache que les popovers déjà instanciés.J'espère que je pourrais vous faire gagner du temps.
la source
Bootstrap prend nativement en charge ceci :
JS Bin Demo
la source
cette solution se débarrasse du 2ème clic embêtant lors de la deuxième apparition du popover
testé avec Bootstrap v3.3.7
la source
J'ai essayé plusieurs des réponses précédentes, vraiment rien ne fonctionne pour moi mais cette solution a fait:
https://getbootstrap.com/docs/3.3/javascript/#dismiss-on-next-click
Ex:
la source
Je suis venu avec ceci: Mon scénario incluait plus de popovers sur la même page, et les cacher les rendait simplement invisibles et à cause de cela, cliquer sur les éléments derrière le popover n'était pas possible. L'idée est de marquer le lien popover spécifique comme «actif», puis vous pouvez simplement «basculer» le popover actif. Cela fermera complètement le popover $ ('. Popover-link'). Popover ({html: true, container: 'body'})
la source
Je supprime simplement les autres popovers actifs avant que le nouveau popover ne s'affiche (bootstrap 3):
la source
testé avec 3.3.6 et le deuxième clic est ok
la source
démo: http://jsfiddle.net/nessajtr/yxpM5/1/
}
c'est ma solution.
la source
Cette approche garantit que vous pouvez fermer un popover en cliquant n'importe où sur la page. Si vous cliquez sur une autre entité cliquable, elle masque tous les autres popovers. L'animation: false est requise sinon vous obtiendrez une erreur jquery .remove dans votre console.
la source
Ok, c'est ma première tentative de répondre à quelque chose sur stackoverflow alors ça ne va rien: P
Il semble qu'il ne soit pas tout à fait clair que cette fonctionnalité fonctionne réellement hors de la boîte sur le dernier bootstrap (eh bien, si vous êtes prêt à faire un compromis où l'utilisateur peut cliquer. Je ne suis pas sûr si vous devez mettre "cliquez sur" survoler en soi, mais sur un iPad, cliquez sur fonctionne comme une bascule.
Le résultat final est, sur un bureau, vous pouvez survoler ou cliquer (la plupart des utilisateurs survolent). Sur un appareil tactile, toucher l'élément le fera monter et le toucher à nouveau le fera descendre. Bien sûr, c'est un léger compromis par rapport à votre exigence d'origine mais au moins votre code est maintenant plus propre :)
la source
En prenant le code de Matt Lockyer, j'ai fait une simple réinitialisation pour que le dom ne soit pas couvert par l'élément sur hide.
Code de Matt: http://mattlockyer.com/2013/04/08/close-a-twitter-bootstrap-popover-when-clicking-outside/
Violon: http://jsfiddle.net/mrsmith/Wd2qS/
la source
Essayez ceci, cela se cachera en cliquant à l'extérieur.
la source
J'avais des problèmes avec la solution de mattdlockyer parce que je configurais dynamiquement des liens popover en utilisant du code comme celui-ci:
J'ai donc dû le modifier comme ça. Cela a résolu beaucoup de problèmes pour moi:
N'oubliez pas que destroy supprime l'élément, donc la partie sélecteur est importante lors de l'initialisation des popovers.
la source