jQuery - Twitter Bootstrap - ferme tous les popovers sur les éléments du corps
Je suis en train de clôturer tout popover
est ouvert lorsque any body element
(pas la liste elle-même) is focused
,
donc je ne:
$(document.body).on('focus focusout focusin', function(e) {
if( e.target.classList.contains('popover') ){return false;}
else{
$('*').popover('hide');
}
//code to close the popover
});
cela fonctionne très bien sur Chrome
mais pas sur FF
sur FF
j'ai besoin de focusin and focusout
avant la liste est fermée.
voici mon exemple de travail uniquement pour chrome: http://jsfiddle.net/CU5U5/4/
Comment puis-je résoudre ce problème?
source d'informationauteur sbaaaang
Vous devez vous connecter pour publier un commentaire.
Une alternative:
Edit:
Donc comme il s'avère, ma réponse ci-dessus est incorrecte. Vous devez appeler .liste('hide') sur l'élément de la liste a été instancié... pas la .liste elle-même. ET vous avez besoin d'arrêter la propagation de l'événement de clic sur le lien (c'est à dire, retourne la valeur false dans le gestionnaire de clic) afin de ne pas remonter jusqu'à la racine du document. Voir cette réponse, http://jsfiddle.net/aFacG/1/.
HTML
JS
Le problème avec l'actuel accepté réponse est que la liste se cache même lorsque vous cliquez à l'intérieur de la bulle d'aide (mauvais si vous avez un élément que vous souhaitez interagir avec l'intérieur de la liste..comme un champ de saisie).
Utiliser le stopPropagation méthode sur votre liste récipient pour éviter que l'événement masquer de remonter le DOM.
Mise à JOUR(bootstrap url changé):http://jsfiddle.net/bNvX7/10/
Être très simpliste:
Voici un peu plus à l'approche générique qui nécessite juste un gestionnaire et fonctionne pour tous les popovers où la bascule/lien contient l'attribut data-, par exemple:
HTML
JS
Peut-être que vous pourriez essayer ceci:
Pas la meilleure pratique, mais il fonctionne très bien sur Chrome et FF.