Saya menggunakan dialog Modal bootstrap Twitter. Ketika saya mengklik tombol kirim dari dialog modal bootstrap, itu mengirimkan permintaan AJAX. Masalah saya adalah bahwa modal-backdrop tidak hilang. Dialog Modal menghilang dengan benar, tetapi "modal-backdrop in" yang membuat opacity pada layar tetap ada
Apa yang dapat saya?
twitter-bootstrap
modal-dialog
paganotti
sumber
sumber
$('#myModal').modal('hide')
? Bisakah Anda menaruh beberapa kode di sini?Jawaban:
Pastikan Anda tidak mengganti wadah yang berisi jendela modal aktual ketika Anda melakukan permintaan AJAX, karena Bootstrap tidak akan dapat menemukan referensi untuknya ketika Anda mencoba untuk menutupnya. Di penangan lengkap Ajax Anda menghapus modal dan kemudian mengganti data.
Jika itu tidak berhasil, Anda selalu bisa memaksanya pergi dengan melakukan hal berikut:
sumber
$('.modal-backdrop').remove()
nampaknya merusak pembukaan modals masa depan dengan benar.Pastikan bahwa panggilan awal Anda ke
$.modal()
untuk menerapkan perilaku modal tidak melewati lebih banyak elemen daripada yang Anda maksudkan. Jika ini terjadi, pada akhirnya akan membuat contoh modal, lengkap dengan elemen latar belakang, untuk setiap elemen dalam koleksi. Akibatnya, ini mungkin terlihat seperti latar belakang yang tertinggal, ketika sebenarnya Anda sedang melihat salah satu duplikat.Dalam kasus saya, saya mencoba membuat konten modal sambil jalan dengan beberapa kode seperti ini:
Di sini, komentar HTML setelah
</div>
tag penutup berarti bahwa myModal sebenarnya merupakan kumpulan dua elemen jQuery - div, dan komentar. Keduanya patuh berubah menjadi modals, masing-masing dengan elemen latar belakangnya sendiri. Tentu saja, modal yang dibuat dari komentar itu tidak terlihat selain dari latar belakang, jadi ketika saya menutup modal nyata (div) itu tampak seperti latar belakang yang tertinggal.sumber
Saya hanya menghabiskan waktu terlalu lama untuk masalah ini :)
Sementara jawaban lain yang diberikan sangat membantu dan valid, tampaknya agak berantakan bagi saya untuk secara efektif menciptakan kembali fungsi penyembunyian modal dari Bootstrap, jadi saya menemukan solusi yang lebih bersih.
Masalahnya adalah bahwa ada serangkaian peristiwa yang terjadi saat Anda menelepon
Saat Anda mengganti sekelompok HTML sebagai hasil dari permintaan AJAX, acara penyembunyian modal tidak selesai. Namun, Bootstrap memicu suatu peristiwa ketika semuanya selesai , dan Anda dapat menghubungkannya seperti itu:
Semoga ini bisa membantu!
sumber
$('#myModal').removeClass('fade');$(myModal').modal('hide')'
Masukkan di tombol tindakan Anda ini:
dan
contoh:
jika Anda memasukkan data-attr ini .modal-backdrop tidak akan muncul. dokumentasi tentang hal ini di tautan ini: http://getbootstrap.com/javascript/#modals-usage
sumber
data-backdrop="false"
hanyalah sebuah pilihan yang memberitahu bootstrap untuk tidak menggunakan latar belakang sama sekali . Ini tidak ada hubungannya dengan masalah yang sebenarnya, itu hanya menghindarinya. Itu seperti mengatakan "Aku tidak bisa berenang jadi aku berhenti masuk kolam". Itu keren, tapi kamu masih tidak bisa berenang dan jika bosmu melemparmu ke ujung yang dalam, kamu akan tenggelam. Ada banyak kasus di mana intervensi manual diperlukan, seperti ketika Angular menginjak DOM di latar belakang aplikasi Anda.Jika Anda menggunakan salin dan tempel dari situs getboostrap itu sendiri ke pemilih html, pastikan Anda menghapus komentar '<! - /.modal ->'. Bootstrap menjadi bingung dan berpikir bahwa komentar tersebut adalah elemen modal kedua. Ini menciptakan drop kembali lain untuk elemen "kedua" ini.
sumber
Saya tahu ini posting yang sangat lama tetapi ini mungkin membantu. Ini solusi yang sangat kecil bagi saya
Itu saja, ini harus menyelesaikan masalah
sumber
myModal
seharusnya? Dan mengapa itu menutup dialog? Dialog modal hanya ditutup dengan mengklik tombol tutup atau mengklik di luar dialog. Ini sepertinya tidak menjadi solusi.Saya mengalami masalah serupa: di jendela modal saya, saya memiliki dua tombol, "Batal" dan "OK". Awalnya, kedua tombol akan menutup jendela modal dengan memohon
$('#myModal').modal('hide')
(dengan "OK" sebelumnya menjalankan beberapa kode) dan skenario akan menjadi sebagai berikut:baiklah, sesama meja depan saya menyelamatkan hari saya: alih-alih memohon
$('#myModal').modal('hide')
, berikan atribut tombol Andadata-dismiss="modal"
dan tambahkan acara "klik" ke tombol "Kirim". Dalam masalah saya, kode HTML (well, TWIG) untuk tombol tersebut adalah:dan dalam kode JavaScript saya, saya punya:
sementara tidak ada acara "klik" yang dikaitkan dengan tombol "Batal". Modal sekarang ditutup dengan benar dan memungkinkan saya bermain lagi dengan halaman "normal". Tampaknya
data-dismiss="modal"
seharusnya satu-satunya cara untuk menunjukkan bahwa tombol (atau elemen DOM apa pun) harus menutup modal Bootstrap. Itu.modal('hide')
Metode tampaknya berperilaku dengan cara tidak cukup terkendali.Semoga ini membantu!
sumber
Masalah ini juga dapat terjadi jika Anda menyembunyikan dan kemudian menampilkan kembali jendela modal terlalu cepat. Ini disebutkan di tempat lain untuk pertanyaan, tetapi saya akan memberikan beberapa detail lebih lanjut di bawah ini.
Masalahnya berkaitan dengan waktu, dan transisi memudar. Jika Anda menunjukkan modal sebelum transisi fade out untuk modal sebelumnya selesai, Anda akan melihat masalah latar belakang yang terus-menerus ini (latar belakang modal akan tetap ada di layar, dengan cara Anda). Bootstrap secara eksplisit tidak mendukung banyak moda simultan, tetapi ini tampaknya menjadi masalah bahkan jika modal yang Anda sembunyikan dan modal yang Anda tampilkan adalah sama.
Jika ini adalah alasan yang tepat untuk masalah Anda, berikut adalah beberapa opsi untuk mengurangi masalah ini. Opsi # 1 adalah tes cepat dan mudah untuk menentukan apakah waktu transisi fade memang penyebab masalah Anda.
Berikut adalah beberapa posting pelacak masalah bootstrap terkait. Ada kemungkinan bahwa ada lebih banyak posting pelacak daripada yang saya sebutkan di bawah ini.
sumber
.modal ('sembunyikan')
Menyembunyikan modal secara manual. Kembali ke pemanggil sebelum modal benar-benar disembunyikan (yaitu sebelum peristiwa hidden.bs.modal terjadi).
Jadi, bukannya
melakukan
Jadi, Anda pasti menunggu sampai acara "sembunyikan" selesai.
sumber
Kemungkinan kesalahan lain yang dapat menghasilkan masalah ini,
Pastikan Anda tidak memasukkan
bootstrap.js
skrip lebih dari satu kali di halaman Anda!sumber
Bahkan saya mengalami masalah yang sama, saya memiliki dua tombol berikut
Saya ingin melakukan beberapa operasi ajax dan pada keberhasilan operasi ajax itu menutup modal. Jadi inilah yang saya lakukan.
Saya memicu acara klik tombol 'Tidak' yang memiliki
data-dismiss="modal"
properti. Dan ini berhasil :)sumber
menggunakan:
Sumber
sumber
Solusi ini untuk Ruby on Rails 3.x dan file js.erb yang membangun kembali bagian DOM termasuk modalnya. Ini berfungsi terlepas dari apakah panggilan ajax berasal dari modal atau dari bagian halaman yang berbeda.
Terima kasih kepada @BillHuertas untuk titik awalnya.
sumber
$ ('# myModal'). trigger ('klik');
Ini berhasil untuk saya. Itu tidak menutup karena ketika Anda membuka popup itu memicu 2 atau 3 modal-latar belakang. Jadi, ketika Anda melakukan $ ('# myModal')). Modal ('hide'); itu hanya mempengaruhi satu modal-latar belakang dan sisa-sisa yang tersisa.
sumber
masalah updatepanel.
Masalah saya adalah karena penempatan updatepanel. Saya memiliki seluruh modal dalam updatepanel. Jika Anda mendeklarasikan modal di luar updatepanel dan katakan saja, badan modal, di panel pembaruan, maka $ ('# myModalID'). Modal ('sembunyikan'); bekerja.
sumber
Sudut pandang lain untuk pertanyaan ini. (Saya menggunakan bootstrap.js versi 3.3.6)
Saya salah menginisialisasi modal baik secara manual di javascript:
dan dengan menggunakan
data-toggle="modal"
pada tombol ini seperti contoh di bawah ini (ditunjukkan dalam dokumen)
jadi hasilnya buat dua instance dari
tambahkan ke tubuh html saya ketika membuka modal. Ini bisa menjadi penyebab ketika menutup modal dengan menggunakan fungsi:
hanya menghapus satu contoh latar belakang (seperti yang ditunjukkan di atas) sehingga latar belakang tidak akan hilang. Tapi itu hilang jika Anda menggunakan
data-dismiss="modal"
add on html seperti yang ditunjukkan di doc bootstrap.Jadi solusi untuk masalah saya adalah dengan hanya menginisialisasi modal secara manual dalam javascript dan tidak menggunakan atribut data, Dengan cara ini saya dapat menutup modal secara manual dan dengan menggunakan
data-dismiss="modal"
fitur.Semoga ini bisa membantu jika Anda menemui masalah yang sama dengan saya.
sumber
FYI kalau-kalau ada yang mengalami ini ... Saya telah menghabiskan sekitar 3 jam untuk menemukan bahwa cara terbaik untuk melakukannya adalah sebagai berikut:
Fungsi untuk menutup modal itu sangat tidak intuitif.
sumber
Menambahkan
data-dismiss="modal"
tombol apa pun di modal saya berhasil untuk saya. Saya ingin tombol saya untuk memanggil fungsi dengan angular untuk menyalakan panggilan ajax DAN menutup modal jadi saya menambahkan.toggle()
fungsi dan berfungsi dengan baik. (Dalam kasus saya, saya menggunakanbootstrap modal
dan menggunakan beberapaangular
, bukan pengontrol modal yang sebenarnya).sumber
Saya memiliki masalah yang sama. Saya menemukan itu karena konflik antara Bootstrap dan JQueryUI.
Keduanya menggunakan kelas "tutup". Mengubah kelas di satu atau yang lain memperbaiki ini.
sumber
Menggunakan toggle bukannya hide, menyelesaikan masalah saya
sumber
Pastikan Anda tidak menggunakan ID / kelas elemen yang sama di tempat lain, untuk elemen yang tidak terkait dengan komponen modal.
Yaitu .. jika Anda mengidentifikasi tombol Anda yang memicu modal popup menggunakan nama kelas 'myModal', pastikan bahwa tidak ada elemen yang tidak terkait yang memiliki nama kelas yang sama.
sumber
Setelah menerapkan solusi berperingkat teratas, saya memiliki masalah sehingga tidak dapat membuka modals masa depan dengan benar. Saya telah menemukan solusi saya yang bekerja dengan baik
sumber
Saya memiliki masalah yang sama ketika mencoba mengirimkan formulir. Solusinya adalah mengubah jenis tombol dari
submit
menjadibutton
dan kemudian menangani acara klik tombol seperti:sumber
Dalam proyek .net MVC4 saya memiliki modal pop up (bootstrap 3.0) di dalam Ajax.BeginForm (OnComplete = "addComplete" [kode tambahan dihapus]). Di dalam javascript "addComplete" saya memiliki kode berikut. Ini menyelesaikan masalah saya.
sumber
Saya memiliki masalah yang sama.
Namun saya menggunakan bootbox.js, jadi bisa jadi ada hubungannya dengan itu.
Either way, saya menyadari bahwa masalah ini disebabkan oleh memiliki elemen dengan kelas yang sama dengan orang tuanya. Ketika salah satu elemen ini digunakan untuk mengikat fungsi klik untuk menampilkan modal, maka masalah terjadi.
yaitu inilah yang menyebabkan masalah:
ubahlah sehingga elemen yang diklik tidak memiliki kelas yang sama dengan orang tuanya, anak-anak itu, atau leluhur lainnya. Mungkin praktik yang baik untuk melakukan ini secara umum saat mengikat fungsi klik.
sumber
Saya bekerja dengan Meteor dan saya punya masalah yang sama. Penyebab bug saya adalah ini:
Seperti yang Anda lihat saya menambahkan modal di yang lain, jadi ketika modal saya memperbarui informasi kontak jika memiliki keadaan lain. Ini menyebabkan templat modal ditinggalkan dari DOM sebelum ditutup.
Solusinya: pindahkan modal keluar dari if-else:
sumber
fiddle -> https://jsfiddle.net/o6th7t1x/4/
sumber
nilai awal dari atribut data-backdrop Anda bisa
"statis", "benar", "salah".
statis dan true menambahkan modal shadow, sementara false menonaktifkan shadow, jadi Anda hanya perlu mengubah nilai ini dengan klik pertama menjadi false. seperti ini:
sumber
Saya memiliki masalah pembekuan layar latar belakang modal tetapi dalam skenario yang sedikit berbeda: Ketika 2 back to back modals sedang ditampilkan. mis. Yang pertama akan meminta konfirmasi untuk melakukan sesuatu dan setelah tombol 'konfirmasi' diklik, tindakan akan menemukan kesalahan dan modal ke-2 akan ditampilkan untuk memunculkan pesan kesalahan. Latar belakang modal kedua akan membekukan layar. Tidak ada bentrokan dalam nama kelas atau id elemen.
Cara masalah itu diperbaiki adalah memberi browser cukup waktu untuk berurusan dengan modal latar belakang. Alih-alih segera mengambil tindakan setelah 'konfirmasi' diklik, berikan browser katakan 500ms untuk menyembunyikan modal pertama dan bersihkan latar belakang dll - kemudian ambil tindakan yang akan berakhir dengan menunjukkan modal kesalahan.
Fungsi _dialogConfirmed () memiliki kode berikut:
Saya menduga solusi lain bekerja karena mereka membutuhkan waktu ekstra yang cukup memberi browser waktu pembersihan yang diperlukan.
sumber
Di ASP.NET, tambahkan pembaruan untuk UpdatePanel pada kode di belakang setelah perintah jquery. Contoh:
sumber