J'utilise la boîte de dialogue Modal d'amorçage Twitter. Lorsque je clique sur le bouton Soumettre de la boîte de dialogue modale de démarrage, il envoie une demande AJAX. Mon problème est que le fond modal ne disparaît pas. La boîte de dialogue Modale disparaît correctement, mais à la place, "fond modal" qui crée l'opacité à l'écran reste
Que puis-je faire?
twitter-bootstrap
modal-dialog
paganotti
la source
la source
$('#myModal').modal('hide')
? Pouvez-vous mettre du code ici?Réponses:
Assurez-vous que vous ne remplacez pas le conteneur contenant la fenêtre modale réelle lorsque vous effectuez la demande AJAX, car Bootstrap ne sera pas en mesure de trouver une référence à celui-ci lorsque vous essayez de le fermer. Dans votre gestionnaire complet Ajax, supprimez le modal, puis remplacez les données.
Si cela ne fonctionne pas, vous pouvez toujours le forcer à disparaître en procédant comme suit:
la source
$('.modal-backdrop').remove()
semble casser correctement l'ouverture des futurs modaux.Assurez-vous que votre appel initial à
$.modal()
pour appliquer le comportement modal ne transmet pas plus d'éléments que prévu. Si cela se produit, il finira par créer une instance modale, complète avec l'élément backdrop, pour CHAQUE élément de la collection. Par conséquent, il peut sembler que la toile de fond a été laissée derrière, alors qu'en réalité vous regardez l'un des doublons.Dans mon cas, j'essayais de créer le contenu modal à la volée avec un code comme celui-ci:
Ici, le commentaire HTML après la
</div>
balise de fermeture signifiait que myModal était en fait une collection jQuery de deux éléments - le div et le commentaire. Tous deux ont été consciencieusement transformés en modaux, chacun avec son propre élément de toile de fond. Bien sûr, le modal fait à partir du commentaire était invisible en dehors de la toile de fond, donc quand j'ai fermé le vrai modal (le div), il semblait que l'arrière-plan avait été laissé.la source
Je viens de passer trop de temps sur ce problème :)
Bien que les autres réponses fournies soient utiles et valides, il m'a semblé un peu compliqué de recréer efficacement la fonctionnalité de masquage modal de Bootstrap, j'ai donc trouvé une solution plus propre.
Le problème est qu'il y a une chaîne d'événements qui se produisent lorsque vous appelez
Lorsque vous remplacez ensuite un tas de code HTML à la suite de la demande AJAX, les événements de masquage modal ne se terminent pas. Cependant, Bootstrap déclenche un événement lorsque tout est terminé , et vous pouvez vous y connecter comme suit:
J'espère que cela vous sera utile!
la source
$('#myModal').removeClass('fade');$(myModal').modal('hide')'
Insérez dans votre bouton d'action ceci:
et
exemple:
si vous saisissez ce data-attr, le .modal-backdrop n'apparaîtra pas. documentation à ce sujet sur ce lien: http://getbootstrap.com/javascript/#modals-usage
la source
data-backdrop="false"
est simplement une option indiquant à bootstrap de ne pas utiliser de toile de fond du tout . Cela n'a rien à voir avec le problème réel, cela l'évite. Ce serait comme dire "je ne peux pas nager alors j'ai arrêté de rentrer dans la piscine". C'est cool, mais vous ne savez toujours pas nager et si vous êtes le patron vous jette dans le fond, vous vous noierez. Il existe de nombreux cas où une intervention manuelle est requise, comme lorsque Angular bute sur le DOM en arrière-plan de votre application.Si vous utilisez un copier-coller du site getboostrap lui-même dans un sélecteur généré en HTML, assurez-vous de supprimer le commentaire '<! - /.modal ->'. Bootstrap devient confus et pense que le commentaire est un deuxième élément modal. Il crée un autre retour arrière pour ce "deuxième" élément.
la source
Je sais que c'est un très vieux poste, mais cela pourrait aider. Ceci est une très petite solution de contournement par moi
C'est tout, cela devrait résoudre le problème
la source
myModal
supposé être? Et pourquoi fermerait-il la boîte de dialogue? Les boîtes de dialogue modales ne se ferment qu'en cliquant sur le bouton Fermer ou en cliquant à l'extérieur de la boîte de dialogue. Cela ne semble pas être une solution.J'ai rencontré un problème similaire: dans ma fenêtre modale, j'ai deux boutons, "Annuler" et "OK". À l'origine, les deux boutons fermaient la fenêtre modale en invoquant
$('#myModal').modal('hide')
(avec "OK" exécutant précédemment du code) et le scénario serait le suivant:eh bien, mon prochain bureau a sauvé ma journée: au lieu d'invoquer
$('#myModal').modal('hide')
, attribuez à vos boutons l'attributdata-dismiss="modal"
et ajoutez un événement "clic" à votre bouton "Soumettre". Dans mon problème, le code HTML (enfin TWIG) du bouton est:et dans mon code JavaScript, j'ai:
alors qu'aucun événement "clic" n'est attribué au bouton "Annuler". Le modal se ferme maintenant correctement et me permet de rejouer avec la page "normale". Il semble en fait que le
data-dismiss="modal"
devrait être le seul moyen d'indiquer qu'un bouton (ou n'importe quel élément DOM) devrait fermer un modal Bootstrap. La.modal('hide')
méthode semble se comporter d'une manière pas tout à fait contrôlable.J'espère que cela t'aides!
la source
Ce problème peut également se produire si vous masquez, puis affichez à nouveau la fenêtre modale trop rapidement. Cela a été mentionné ailleurs pour question, mais je fournirai plus de détails ci-dessous.
Le problème est lié au timing et à la transition de fondu. Si vous affichez un modal avant que la transition de fondu sortant pour le modal précédent ne soit terminée, vous verrez ce problème de toile de fond persistant (la toile de fond modale restera à l'écran, à votre manière). Bootstrap ne prend explicitement pas en charge plusieurs modaux simultanés, mais cela semble être un problème même si le modal que vous cachez et le modal que vous affichez sont les mêmes.
Si c'est la bonne raison de votre problème, voici quelques options pour atténuer le problème. L'option n ° 1 est un test rapide et facile pour déterminer si le timing de transition de fondu est effectivement la cause de votre problème.
Voici quelques articles liés au suivi des problèmes de démarrage. Il est possible qu'il y ait plus de messages de suivi que je n'en ai énumérés ci-dessous.
la source
.modal ('cacher')
Masque manuellement un modal. Retourne à l'appelant avant que le modal ne soit réellement caché (c'est-à-dire avant que l'événement hidden.bs.modal ne se produise).
Donc au lieu de
faire
Vous êtes donc certain d'attendre la fin de l'événement "hide".
la source
Une autre erreur possible qui pourrait produire ce problème,
Assurez-vous que vous n'avez pas inclus le
bootstrap.js
script plus d'une fois dans votre page!la source
Même j'ai rencontré un problème similaire, j'avais les deux boutons suivants
Je voulais effectuer une opération ajax et en cas de succès de cette opération ajax fermer le modal. Voici donc ce que j'ai fait.
J'ai déclenché l'événement click du bouton 'Non' qui avait la
data-dismiss="modal"
propriété. Et cela a fonctionné :)la source
utilisation:
La source
la source
Cette solution concerne Ruby on Rails 3.x et un fichier js.erb qui reconstruit une partie du DOM, y compris le modal. Cela fonctionne indépendamment du fait que l'appel ajax provienne du modal ou d'une autre partie de la page.
Merci à @BillHuertas pour le point de départ.
la source
$ ('# myModal'). trigger ('click');
Cela a fonctionné pour moi. Il ne se ferme pas parce que lorsque vous ouvrez la fenêtre contextuelle, il déclenche 2 ou 3 backdrops modaux. Donc quand vous faites $ ('# myModal')). Modal ('hide'); il n'effectue qu'une seule toile de fond modale et le reste reste.
la source
problème avec le panneau de mise à jour.
Mon problème était dû à l'emplacement du panneau de mise à jour. J'ai eu l'intégralité du modal dans le panneau de mise à jour. Si vous déclarez le modal en dehors du panneau de mise à jour et que vous avez juste à dire, le corps du modal, dans le panneau de mise à jour, alors le $ ('# myModalID'). Modal ('hide'); travaillé.
la source
Un autre point de vue sur cette question. (J'utilise la version 3.3.6 de bootstrap.js)
Je me suis trompé d'initialiser le modal à la fois manuellement en javascript:
et en utilisant
data-toggle="modal"
dans ce bouton comme l'exemple ci-dessous (montré dans le document)
de sorte que le résultat sa créer deux instances de
ajouter au corps de mon html lors de l'ouverture du modal. Cela peut être la cause lors de la fermeture du modal en utilisant la fonction:
il supprime une seule instance de toile de fond (comme indiqué ci-dessus) afin que la toile de fond ne disparaisse pas. Mais il a disparu si vous utilisez
data-dismiss="modal"
add on html comme le montre le doc bootstrap.Donc, la solution à mon problème est d'initialiser uniquement le modal manuellement en javascript et de ne pas utiliser d'attribut de données. De cette façon, je peux à la fois fermer le modal manuellement et en utilisant des
data-dismiss="modal"
fonctionnalités.J'espère que cela vous aidera si vous rencontrez le même problème que moi.
la source
Pour info au cas où quelqu'un se heurterait encore à ça ... J'ai passé environ 3 heures à découvrir que la meilleure façon de le faire est la suivante:
Cette fonction pour fermer le modal est très peu intuitive.
la source
L'ajout
data-dismiss="modal"
de boutons dans mon modal a fonctionné pour moi. Je voulais que mon bouton appelle une fonction avec angulaire pour lancer un appel ajax ET fermer le modal, j'ai donc ajouté un.toggle()
dans la fonction et cela a bien fonctionné. (Dans mon cas, j'ai utilisé unbootstrap modal
et j'en ai utilisé certainsangular
, pas un véritable contrôleur modal).la source
J'ai eu le même problème. J'ai découvert que c'était dû à un conflit entre Bootstrap et JQueryUI.
Les deux utilisent la classe "close". Changer la classe dans l'un ou l'autre corrige cela.
la source
Utilisation de la bascule au lieu de masquer, résolu mon problème
la source
Assurez-vous que vous n'utilisez pas le même ID / classe d'élément ailleurs, pour un élément sans rapport avec le composant modal.
C'est-à-dire .. si vous identifiez vos boutons qui déclenchent les fenêtres contextuelles modales en utilisant le nom de classe «myModal», assurez-vous qu'il n'y a aucun élément sans rapport ayant le même nom de classe.
la source
Après avoir appliqué la solution la mieux notée, j'ai eu un problème de rupture correcte des futurs modaux. J'ai trouvé ma solution qui fonctionne bien
la source
J'ai eu le même problème en essayant de soumettre le formulaire. La solution consistait à changer le type de bouton de
submit
àbutton
puis à gérer l'événement de clic de bouton comme suit:la source
Dans le projet .net MVC4, j'avais le pop-up modal (bootstrap 3.0) dans un Ajax.BeginForm (OnComplete = "addComplete" [code supplémentaire supprimé]). Dans le javascript "addComplete" j'avais le code suivant. Cela a résolu mon problème.
la source
J'ai eu ce même problème.
Cependant, j'utilisais bootbox.js, donc cela aurait pu être quelque chose à voir avec ça.
Dans les deux cas, j'ai réalisé que le problème était dû au fait d'avoir un élément avec la même classe que son parent. Lorsque l'un de ces éléments est utilisé pour lier une fonction de clic pour afficher le modal, le problème se produit.
c'est-à-dire c'est ce qui cause le problème:
modifiez-le afin que l'élément sur lequel vous cliquez ne soit pas de la même classe que son parent, ses enfants ou tout autre ancêtre. C'est probablement une bonne pratique de le faire en général lors de la liaison des fonctions de clic.
la source
Je travaille avec Meteor et je viens de rencontrer le même problème. La cause de mon bug était la suivante:
Comme vous pouvez le voir, j'ai ajouté le modal dans le reste, donc quand mon modal a mis à jour les informations de contact, le if avait un autre état. Cela a causé le modèle modal à être laissé hors du DOM juste avant sa fermeture.
La solution: sortir le modal du if-else:
la source
violon -> https://jsfiddle.net/o6th7t1x/4/
la source
la valeur initiale de votre attribut data-backdrop peut être
"statique", "vrai", "faux".
static et true ajoutent l'ombre modale, tandis que false désactive l'ombre, il vous suffit donc de changer cette valeur avec le premier clic sur false. comme ça:
la source
J'ai eu le problème de gel de l'écran de fond modal, mais dans un scénario légèrement différent: lorsque 2 modaux dos à dos étaient affichés. Par exemple, le premier demanderait une confirmation pour faire quelque chose et après avoir cliqué sur le bouton 'confirmer', l'action rencontrerait une erreur et le 2ème modal allait être affiché pour faire apparaître le message d'erreur. La deuxième toile de fond modale gèlerait l'écran. Il n'y a pas eu de conflits dans les noms de classe ou les identifiants des éléments.
Le problème a été résolu en donnant au navigateur suffisamment de temps pour gérer le contexte modal. Au lieu de prendre immédiatement l'action après avoir cliqué sur `` confirmer '', donnez au navigateur 500 ms pour masquer le premier modal et nettoyer la toile de fond, etc. - puis prenez l'action qui finirait par montrer l'erreur modale.
La fonction _dialogConfirmed () a le code suivant:
Je suppose que les autres solutions ont fonctionné car elles ont pris suffisamment de temps supplémentaire pour donner au navigateur le temps de nettoyage nécessaire.
la source
Dans ASP.NET, ajoutez une mise à jour pour UpdatePanel sur le code derrière après la commande jquery. Exemple:
la source