Saya menggunakan bootstrap Twitter, saya telah menentukan modal
<div class="modal hide" id="modal-item">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal">x</button>
<h3>Update Item</h3>
</div>
<form action="http://www.website.com/update" method="POST" class="form-horizontal">
<div class="modal-body">
Loading content...
</div>
<div class="modal-footer">
<a href="#" class="btn" data-dismiss="modal">Close</a>
<button class="btn btn-primary" type="submit">Update Item</button>
</div>
</form>
</div>
Dan tautannya
<a href="http://www.website.com/item/1" data-target="#modal-item" data-toggle="modal">Edit 1</a>
<a href="http://www.website.com/item/2" data-target="#modal-item" data-toggle="modal">Edit 2</a>
<a href="http://www.website.com/item/3" data-target="#modal-item" data-toggle="modal">Edit 2</a>
Ketika saya mengklik salah satu tautan ini untuk pertama kalinya, saya melihat konten yang benar, tetapi ketika saya mengklik tautan lain itu menunjukkan konten yang sama dimuat untuk pertama kalinya, itu tidak memperbarui konten.
Saya ingin diperbarui setiap kali diklik.
PS: Saya dapat dengan mudah membuatnya bekerja melalui fungsi jQuery kustom, tapi saya ingin tahu apakah itu mungkin dengan fungsi remote asli Bootstrap modal, karena itu harus cukup mudah dan saya kira saya hanya mempersulit.
jquery
jquery-plugins
twitter-bootstrap
modal-dialog
Dhruv Kumar Jha
sumber
sumber
remote
Modals sudah usang pada Bootstrap v3.2.1 dan akan hilang di v4.Jawaban:
Masalahnya adalah dua kali lipat.
Pertama , setelah objek Modal dipakai, itu terus melekat pada elemen yang ditentukan oleh
data-target
dan panggilan berikutnya untuk menunjukkan bahwa modal hanya akan memanggilnyatoggle()
, tetapi tidak akan memperbarui nilai dalamoptions
. Jadi, meskipunhref
atribut berbeda pada tautan Anda yang berbeda, ketika modalnya diubah, nilai untuknyaremote
tidak diperbarui. Untuk sebagian besar opsi, seseorang dapat menyiasatinya dengan langsung mengedit objek. Misalnya:Namun, itu tidak akan berfungsi dalam kasus ini, karena ...
Kedua , plugin Modal dirancang untuk memuat sumber daya jarak jauh di konstruktor objek Modal, yang sayangnya berarti bahwa bahkan jika perubahan dibuat ke
options.remote
, itu tidak akan pernah dimuat ulang .Obat sederhana adalah dengan menghancurkan objek Modal sebelum matikan berikutnya. Salah satu pilihan adalah menghancurkannya setelah selesai bersembunyi:
Catatan: Sesuaikan penyeleksi sesuai kebutuhan. Ini yang paling umum.
Plunker
Atau Anda dapat mencoba membuat skema yang lebih rumit untuk melakukan sesuatu seperti memeriksa apakah tautan yang meluncurkan modal berbeda dari yang sebelumnya. Jika ya, hancurkan; jika tidak, maka tidak perlu memuat ulang.
sumber
hide
kelas pada modal, jadi jika jendela Anda terlalu kecil, modal mungkin telah memblokir acara mouse pada tombol. Untuk beberapa alasan, JSFiddle.net benar-benar buruk pagi ini (ada 504 yang mencoba memperbarui), jadi saya hanya mengulangi contohnya di plnkr.co, yang lebih baik untuk AJAX.bs.modal
di$(this).removeData('bs.modal')
bekerja untuk saya dengan Bootstrap 3$('body').on('hidden.bs.modal', '.modal', function () { $(this).removeData('bs.modal'); });
var modalData = $(this).data('bs.modal'); if (modalData && modalData.options.remote)...
Untuk bootstrap 3 Anda harus menggunakan:
sumber
remoteData
baris:$(this).empty()
$(this).empty()
. Theremote
pilihan beban data remote ke bersarang<div class="modal-content">
elemen. Gunakan$('.modal-content', this).empty();
sebagai gantinya.Untuk Bootstrap 3.1 Anda ingin menghapus data dan mengosongkan
modal-content
dialog daripada keseluruhan (3.0) untuk menghindari flicker sambil menunggu konten jarak jauh dimuat.Jika Anda menggunakan non-remote modals maka kode di atas, tentu saja, akan menghapus kontennya setelah ditutup (buruk). Anda mungkin perlu menambahkan sesuatu ke modals tersebut (seperti
.local-modal
kelas) agar tidak terpengaruh. Kemudian modifikasi kode di atas menjadi:sumber
$(e.target).removeData("bs.modal").find(".modal-content").empty();
seperti modal saya entah bagaimana menjadi tersembunyi dan hanya lapisan abu-abu yang muncul.Terima kasih merv. Saya mulai bermain-main dengan boostrap.js tetapi jawaban Anda cepat dan bersih. Inilah yang akhirnya saya gunakan dalam kode saya.
sumber
Jawaban yang diterima tidak berhasil untuk saya, jadi saya menggunakan JavaScript untuk melakukannya.
sumber
Ini bekerja dengan Bootstrap 3 FYI
sumber
Proyek saya dibangun di Yii & menggunakan plugin Bootstrap-Yii, jadi jawaban ini hanya relevan jika Anda menggunakan Yii.
Perbaikan di atas berhasil tetapi hanya setelah pertama kali modal ditampilkan. Pertama kali kosong. Saya pikir itu karena setelah inisiasi saya kode Yii memanggil fungsi sembunyikan modal sehingga membersihkan variabel inisiasi saya.
Saya menemukan bahwa meletakkan panggilan removeData segera sebelum kode yang meluncurkan modal melakukan trik. Jadi kode saya terstruktur seperti ini ...
sumber
Dalam Bootstrap 3.2.0 acara "on" harus ada di dokumen dan Anda harus mengosongkan modal:
Di Bootstrap 3.1.0 acara "on" bisa berada di badan:
sumber
Mengapa tidak membuatnya lebih umum dengan BS 3? Cukup gunakan "[sesuatu] modal" sebagai ID dari modal DIV.
sumber
Hanya opsi yang berfungsi bagi saya adalah:
Saya menggunakan Bootstrap 3 dan saya memiliki fungsi yang disebut
popup('popup content')
yang menambahkan kotak modal html.sumber
Menambahkan $ (ini) .html (''); untuk menghapus data yang terlihat juga, dan berfungsi cukup baik
sumber
Jika URL jarak jauh disediakan, konten akan dimuat satu kali melalui metode muat jQuery dan disuntikkan ke div .modal-content. Jika Anda menggunakan data-api, Anda dapat menggunakan atribut href sebagai alternatif untuk menentukan sumber jarak jauh. Contohnya ditunjukkan di bawah ini
sumber
Saya telah menambahkan sesuatu seperti ini, karena konten yang lebih lama ditampilkan hingga yang baru muncul, dengan .html ('') di dalam .modal-content akan menghapus HTML di dalamnya, semoga membantu
sumber
Saya menulis cuplikan sederhana yang menangani penyegaran modal. Pada dasarnya ia menyimpan tautan yang diklik dalam data modal dan memeriksa apakah tautan yang sama telah diklik, menghapus atau tidak, data modal.
sumber
Untuk Bootstrap 3, di modal.js saya berubah:
untuk
(spasi ekstra ditambahkan untuk kejelasan)
Ini mencegah flash yang tidak diinginkan dari konten modal lama dengan memanggil empty () pada wadah modal serta menghapus data.
sumber
Yang ini bekerja untuk saya.
sumber
Pendekatan lain ini bekerja dengan baik untuk saya:
sumber
Elemen html mana yang ingin Anda kosongkan (div, span, span)
sumber
Yang ini bekerja untuk saya:
modal
naskah
link-area adalah area tempat saya meletakkan data dan perlu menghapus
sumber
Versi diperluas dari jawaban yang diterima oleh @merv. Itu juga memeriksa apakah modal yang disembunyikan dimuat dari sumber jarak jauh dan membersihkan konten lama untuk mencegahnya berkedip.
https://gist.github.com/WojtekKruszewski/ae86d7fb59879715ae1e6dd623f743c5
sumber
Diuji pada Bootstrap versi 3.3.2
sumber
.removeData()
tanpa parameter akan memberitahu jquery untuk menghapus semua data yang dilampirkan ke elemen itu. Sejauh masalah OP yang bersangkutan,.removeData('bs.modal')
atau.removeData('modal')
akan cukup dan sangat aman.Semoga beruntung dengan yang satu ini:
sumber