Saya telah melihat beberapa pertanyaan terkait dengan bootstrap modals, tetapi tidak ada yang persis seperti ini, jadi saya akan melanjutkan.
Saya memiliki modal yang saya sebut onclick seperti ...
$(".modal-link").click(function(event){
$("#modal-content").modal('show');
});
Ini berfungsi dengan baik, tetapi ketika saya menunjukkan modal saya ingin fokus pada elemen input pertama ... Mungkin elemen input pertama memiliki id #photo_name.
Jadi saya mencoba
$(".modal-link").click(function(event){
$("#modal-content").modal('show');
$("input#photo_name").focus();
});
Tetapi ini tidak berhasil. Terakhir, saya mencoba mengikat ke acara 'show' tetapi meskipun begitu, input tidak akan fokus. Terakhir hanya untuk pengujian, karena saya curiga ini adalah tentang urutan pemuatan js, saya memasukkan setTimeout hanya untuk melihat apakah saya menunda sebentar, apakah fokus akan bekerja, dan ya, itu berhasil! Tetapi metode ini jelas omong kosong. Apakah ada cara untuk memiliki efek yang sama seperti di bawah ini tanpa menggunakan setTimeout?
$("#modal-content").on('show', function(event){
window.setTimeout(function(){
$(event.currentTarget).find('input#photo_name').first().focus()
}, 0500);
});
Hanya ingin mengatakan bahwa Bootstrap 3 menangani ini sedikit berbeda. Nama acara "ditampilkan.bs.modal".
atau letakkan fokus pada input pertama yang terlihat seperti ini:
http://getbootstrap.com/javascript/#modals
sumber
Saya menggunakan ini di tata letak saya untuk menangkap semua modals dan fokus pada input pertama
sumber
$(this).find('input:visible').focus();
Saya punya masalah yang sama dengan bootstrap 3, fokus ketika saya mengklik tautan, tetapi tidak ketika memicu acara dengan javascript. Solusinya:
Mungkin ini tentang animasi!
sumber
Saya punya masalah untuk menangkap acara "ditampilkan.bs.modal" .. Dan ini solusi saya yang berfungsi sempurna ..
Alih-alih sederhana di ():
Gunakan pada () dengan elemen yang didelegasikan:
sumber
Sepertinya itu karena modal animasi diaktifkan (
fade
di kelas dialog), setelah memanggil.modal('show')
, dialog tidak segera terlihat, sehingga tidak bisa mendapatkan fokus saat ini.Saya dapat memikirkan dua cara untuk mengatasi masalah ini:
fade
dari kelas, sehingga dialog langsung terlihat setelah menelepon.modal('show')
. Anda dapat melihat http://codebins.com/bin/4ldqp7x/4 untuk demo. (Maaf @keyur, saya salah mengedit dan menyimpan versi baru dari contoh Anda)focus()
dishown
acara seperti apa yang @keyur menulis.sumber
Saya telah menciptakan cara dinamis untuk memanggil setiap acara secara otomatis. Ini sempurna untuk memfokuskan bidang, karena memanggil acara sekali saja, menghapusnya setelah digunakan.
Anda hanya perlu memanggil
modalEvents()
dokumen siap.Menggunakan:
Jadi, Anda dapat menggunakan modal yang sama untuk memuat apa yang Anda inginkan tanpa khawatir tentang menghapus acara setiap saat.
sumber
Saya memiliki masalah yang sama dengan bootstrap 3 dan dipecahkan seperti ini:
sumber
Bootstrap telah menambahkan acara yang dimuat.
https://getbootstrap.com/docs/3.3/javascript/#modals
tangkap acara 'loaded.bs.modal' di ibukota
sumber
Bootstrap acara modal acara
})
sumber
Solusi yang lebih bersih dan lebih modular mungkin:
Atau gunakan ID Anda sebagai contoh:
Semoga itu bisa membantu ..
sumber