I've read the posts here, the Bootstrap site, and Googled like mad - but can't find what I'm sure is an easy answer...
I have a Bootstrap modal that I open from a link_to helper like this:
<%= link_to "New Contact", new_contact_path, {remote: true, 'data-toggle' => 'modal', 'data-target' => "#myModal", class: "btn btn-primary"} %>
In my ContactsController.create
action, I have code that creates Contact
then passes off to create.js.erb
. In create.js.erb
, I have some error handling code (a mix of ruby and javascript). If everything goes well, I want to close the modal.
This is where I'm having trouble. I can't seem to dismiss the modal when all goes well.
I've tried $('#myModal').modal('hide');
and this has no effect. I've also tried $('#myModal').hide();
which causes the modal to dismiss but leaves the backdrop.
Any guidance on how to close the modal and/or dismiss the backdrop from within create.js.erb
?
Edit
Here's the markup for 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>
I was experiencing with that same error and this line of code really helps me.
I found the correct solution you can use this code
We need to take care of event bubbling. Need to add one line of code
(Referring to Bootstrap 3), To hide the modal use:
$('#modal').modal('hide')
. But the reason the backdrop hung around (for me) was because I was destroying the DOM for the modal before 'hide' finished.To resolve this, I chained the hidden event with the DOM removal. In my case:
this.render()
The Best form to hide and show a modal with bootstrap it's