Saya sudah membaca posting di sini, situs Bootstrap, dan di-Google-kan dengan gila - tetapi tidak dapat menemukan jawaban yang saya yakin mudah ...
Saya memiliki modal Bootstrap yang saya buka dari pembantu link_to seperti ini:
<%= link_to "New Contact", new_contact_path, {remote: true, 'data-toggle' => 'modal', 'data-target' => "#myModal", class: "btn btn-primary"} %>
Dalam ContactsController.create
tindakan saya , saya memiliki kode yang menciptakan Contact
lalu meneruskan ke create.js.erb
. Dalam create.js.erb
, saya memiliki beberapa kode penanganan kesalahan (campuran ruby dan javascript). Jika semuanya berjalan dengan baik, saya ingin menutup modalnya.
Di sinilah saya mengalami masalah. Sepertinya saya tidak bisa mengabaikan modal ketika semuanya berjalan dengan baik.
Saya sudah mencoba $('#myModal').modal('hide');
dan ini tidak berpengaruh. Saya juga sudah mencoba $('#myModal').hide();
yang menyebabkan modal untuk mengabaikan tetapi meninggalkan latar belakang.
Adakah panduan tentang cara menutup modal dan / atau mengabaikan latar belakang dari dalam create.js.erb
?
Edit
Inilah markup untuk 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>
sumber
$('#myModal').modal('hide');
adalah sintaks yang benar untuk menutup / menyembunyikan modal dengan idmyModal
(Anda dapat menguji ini pada halaman dokumentasi Bootstrap ). Apakah Anda yakin memiliki elemen dengan id ini di halaman Anda? Juga, apa yang ingin Anda capai dengan panggilan ini? Implementasi Anda saat ini melakukan permintaan Ajax untuknew_contact_path
dan pada saat yang sama membuka modal dengan konten#myModal
- apakah ini yang Anda inginkan?myModal
. Saya mencoba ulang$('myModal').modal('hide')
dan masih tidak baik. HM. Dalam hal apa yang saya coba selesaikan, saya pikir mungkin salah menggunakan bantuan link_to. Saya telah mengganti ini dengan:<a data-toggle="modal" href="#myModal" class="btn btn-primary">Add Contact</a>
karena saya tidak benar-benar perlu meneleponnew_contact_path
. Saya hanya ingin modal terbuka dan kemudian berurusan dengan input pengguna. Terima kasih telah meluangkan waktu untuk merespons. Saya akan melihat apakah saya tidak bisa menyelesaikannya.$('#myModal').modal('hide');
(ada yang#
hilang dalam komentar Anda).$('#myModal').modal('hide')
. JJawaban:
Dengan modal terbuka di jendela browser, gunakan konsol browser untuk mencoba
Jika berfungsi (dan modal ditutup) maka Anda tahu bahwa Javascript dekat Anda tidak dikirim dari server ke browser dengan benar.
Jika tidak berhasil maka Anda perlu menyelidiki lebih lanjut pada klien apa yang terjadi. Misalnya, pastikan tidak ada dua elemen dengan id yang sama. Misalnya apakah ini bekerja pertama kali setelah memuat halaman tetapi bukan yang kedua kalinya?
Konsol browser: pembakar untuk firefox, konsol debugging untuk Chrome atau Safari, dll.
sumber
untuk menutup modal bootstrap Anda dapat meneruskan 'sembunyikan' sebagai opsi ke metode modal sebagai berikut
Silakan lihat biola yang bekerja di sini
bootstrap juga menyediakan acara yang dapat Anda kaitkan ke fungsionalitas modal , seperti jika Anda ingin memecat suatu peristiwa ketika modal telah selesai disembunyikan dari pengguna, Anda dapat menggunakan hidden.bs.modal event Anda dapat membaca lebih lanjut tentang metode modal dan acara di sini di Dokumentasi
Jika bukan metode di atas yang berfungsi, beri id ke tombol tutup Anda dan memicu klik pada tombol tutup.
sumber
Saya menggunakan Bootstrap 3.4 Bagi saya ini tidak berhasil
$('#myModal').modal('hide')
Dalam keputusasaan, saya melakukan ini:
Mungkin tidak elegan, tetapi berhasil
sumber
Bentuk terbaik untuk menyembunyikan dan menunjukkan modal dengan bootstrap itu
sumber
Saya mengalami kesalahan yang sama dan baris kode ini sangat membantu saya.
sumber
sumber
Saya menemukan solusi yang tepat Anda dapat menggunakan kode ini
sumber
Saya bertemu dengan apa yang saya yakini sebagai masalah serupa. The
$('#myModal').modal('hide');
kemungkinan berjalan melalui fungsi yang dan hits garisMasalahnya adalah bahwa nilai isShown mungkin tidak terdefinisi bahkan jika modal ditampilkan dan nilainya harus benar. Saya telah memodifikasi sedikit kode bootstrap sebagai berikut
Ini tampaknya menyelesaikan masalah sebagian besar. Jika latar belakang masih ada, Anda selalu dapat menambahkan panggilan untuk menghapusnya secara manual setelah panggilan sembunyi
$('.modal-backdrop').remove();
. Tidak ideal sama sekali tetapi bekerja.sumber
(Mengacu Bootstrap 3), Untuk menyembunyikan penggunaan modal:
$('#modal').modal('hide')
. Tapi alasan latar belakang berkeliaran (bagi saya) adalah karena saya menghancurkan DOM untuk modal sebelum 'sembunyikan' selesai.Untuk mengatasi ini, saya merantai acara tersembunyi dengan penghapusan DOM. Dalam kasus saya:
this.render()
sumber
this.render()
pertunjukannyaundefined is not a function
di konsol chrome saya.Saya lebih beruntung membuat panggilan setelah panggilan balik "ditampilkan" terjadi:
Ini memastikan modal telah selesai dimuat sebelum panggilan hide () dibuat.
sumber
Apa yang kami temukan adalah bahwa hanya ada sedikit keterlambatan antara panggilan ke kode server kami dan kembali ke panggilan keberhasilan kembali. Jika kita membungkus panggilan ke server di
$("#myModal").on('hidden.bs.modal', function (e)
handler dan kemudian memanggil$("#myModal").modal("hide");
metode, browser akan menyembunyikan modal dan kemudian memanggil kode sisi server.Sekali lagi, tidak elegan tetapi fungsional.
Seperti yang Anda lihat, ketika
myFunc
dipanggil, ia akan menyembunyikan modal dan kemudian memanggil kode sisi server.sumber
Saya mengalami masalah yang sama, dan setelah sedikit percobaan saya menemukan solusi. Di handler klik saya, saya harus menghentikan acara dari menggelegak, seperti:
sumber
Inilah dokumennya: http://getbootstrap.com/javascript/#modals-methods
Inilah metodenya: $ ('# myModal'). Modal ('hide')
Jika Anda perlu membuka beberapa kali modal dengan konten yang berbeda, saya sarankan untuk menambahkan (di js utama Anda):
Jadi, Anda akan membersihkan konten untuk pembukaan berikutnya dan menghindari semacam caching
sumber
sumber
Bahkan saya memiliki masalah yang sama. ini sangat membantu saya
sumber
Saya menggunakan kode sederhana ini:
sumber
$('#modal').modal('hide');
dan variannya tidak berfungsi untuk saya kecuali jika saya memilikidata-dismiss="modal"
atribut pada tombol Cancel. Seperti Anda, kebutuhan saya adalah untuk menutup / mungkin-tidak menutup berdasarkan pada beberapa logika tambahan sehingga mengklik tautan dengandata-dismiss="modal"
outright tidak akan berhasil. Saya akhirnya memiliki tombol tersembunyi dengandata-dismiss="modal"
itu saya bisa secara pemrograman memanggil penangan klik dari, jadidan kemudian di dalam penangan klik untuk membatalkan ketika Anda harus menutup modal yang bisa Anda miliki
sumber
Kita harus mengurus acara yang menggelegak. Perlu menambahkan satu baris kode
sumber
Saya menyadari ini adalah pertanyaan lama, tetapi saya menemukan bahwa tidak ada satupun yang benar-benar yang saya cari. Tampaknya disebabkan oleh mencoba untuk menutup modal sebelum selesai ditampilkan.
Solusi saya didasarkan pada jawaban @ schoonie23 tetapi saya harus mengubah beberapa hal.
Pertama, saya mendeklarasikan variabel global di bagian atas skrip saya:
Kemudian dalam kode modal saya:
Maka ini: (Perhatikan nama 'diperlihatkan.bs.modal' yang menunjukkan bahwa modal telah menunjukkan sepenuhnya sebagai kebalikan dari 'pertunjukan' yang memicu ketika acara acara dipanggil. (Saya awalnya mencoba hanya 'ditampilkan' tetapi tidak berhasil. )
Semoga ini menyelamatkan seseorang penelitian tambahan suatu hari nanti. Saya menghabiskan sedikit mencari solusi sebelum saya datang dengan ini.
sumber
Saya menggunakan kode ini -
Sembunyikan modal dengan efek halus menggunakan Fade Out.
sumber
Jika Anda menggunakan kelas dekat di modals Anda, yang berikut ini akan berfungsi. Tergantung pada kasus penggunaan Anda, saya biasanya merekomendasikan pemfilteran hanya ke modal yang terlihat jika ada lebih dari satu modals dengan kelas dekat.
sumber
document.getElementById ('closeButton'). klik (); // tambahkan atribut data-dismiss = "modal" ke elemen dalam modal dan berikan id ini
sumber
Ini adalah praktik buruk tetapi Anda dapat menggunakan teknik ini untuk menutup modal dengan memanggil tombol tutup di javascript. Ini akan menutup modal setelah 3 detik.
sumber
ini bisa dilakukan hanya dalam HTML:
sumber