J'ai lu les messages ici, le site Bootstrap et j'ai fait des recherches sur Google, mais je n'arrive pas à trouver ce que je pense être une réponse facile...
J'ai une modale Bootstrap que j'ouvre à partir d'une aide link_to comme ceci :
<%= link_to "New Contact", new_contact_path, {remote: true, 'data-toggle' => 'modal', 'data-target' => "#myModal", class: "btn btn-primary"} %>
Dans mon ContactsController.create
j'ai du code qui crée Contact
puis passe à create.js.erb
. Sur create.js.erb
J'ai un code de gestion des erreurs (un mélange de ruby et de javascript). Si tout se passe bien, je veux fermer la modale.
C'est là que j'ai des problèmes. Je ne parviens pas à rejeter la modale lorsque tout va bien.
J'ai essayé $('#myModal').modal('hide');
et cela n'a aucun effet. J'ai également essayé $('#myModal').hide();
qui fait disparaître la modale mais laisse le fond d'écran.
Des conseils sur la manière de fermer la modale et/ou de rejeter la toile de fond depuis l'intérieur. create.js.erb
?
Modifier
Voici le balisage de myModal :
<div class="modal hide" id="myModal" >
<div class="modal-header">
<a class="close" data-dismiss="modal">×</a>
<h3>Add Contact</h3>
<div id="errors_notification">
</div>
</div>
<div class="modal-body">
<%= form_for :contact, url: contacts_path, remote: true do |f| %>
<%= f.text_field :first_name, placeholder: "first name" %>
<%= f.text_field :last_name, placeholder: "last name" %>
<br>
<%= f.submit "Save", name: 'save', class: "btn btn-primary" %>
<a class="close btn" data-dismiss="modal">Cancel</a>
<% end %>
</div>
<div class="modal-footer">
</div>
</div>
2 votes
$('#myModal').modal('hide');
est la syntaxe correcte pour fermer/masquer la modale avec idmyModal
(vous pouvez tester cela sur le Page de documentation sur Bootstrap ). Êtes-vous sûr d'avoir un élément avec cet id sur votre page ? En outre, qu'essayez-vous d'accomplir avec cet appel ? Votre implémentation actuelle effectue une requête Ajax versnew_contact_path
et en même temps ouvre la modale avec le contenu de#myModal
- C'est ce que vous voulez ?0 votes
Salut, Julian. J'ai posté mon balisage duodal ci-dessus et il y a, en effet, une div avec id
myModal
. J'ai réessayé$('myModal').modal('hide')
et toujours rien de bon. HM. En ce qui concerne ce que j'essaie d'accomplir, je pense qu'il était peut-être incorrect d'utiliser l'aide link_to. Je l'ai remplacé par :<a data-toggle="modal" href="#myModal" class="btn btn-primary">Add Contact</a>
puisque je n'ai pas vraiment besoin d'un appel ànew_contact_path
. Je veux simplement que la modale s'ouvre et traite ensuite les entrées de l'utilisateur. Merci d'avoir pris le temps de répondre. Je vais voir si je ne peux pas résoudre ce problème.0 votes
Je suppose que c'est juste une faute de frappe, mais l'appel devrait être
$('#myModal').modal('hide');
(il existe un#
manquant dans votre commentaire).1 votes
C'est ma faute si j'ai tapé au lieu de copier le code réel. Le code actuel est le suivant :
$('#myModal').modal('hide')
. J0 votes
Vous pouvez essayer d'utiliser bootboxjs
0 votes
Un commentaire mineur ici, mais dans votre balisage, votre élément #myModal contient déjà la classe '.hide' ? Si vous appliquez cette classe à cet élément manuellement, le comportement de fermeture de la modale sera erratique (par exemple, la boîte de la modale sera masquée, mais pas la superposition grise derrière elle). C'est juste une idée.