Terakhir contoh jQuery's focus()
dokumentasi serikat
$('#id').focus()
harus membuat input terfokus (aktif). Saya dapat't tampaknya untuk mendapatkan kerja ini.
Bahkan di konsol pada situs ini, aku'm mencoba untuk kotak pencarian
$('input[name="q"]').focus()
dan saya'm mendapatkan apa-apa. Ada ide?
Benar-benar contoh yang anda berikan untuk fokus pada situs ini bekerja baik-baik saja, asalkan anda're tidak berfokus pada konsol. Alasan yang's tidak bekerja hanya karena itu's tidak mencuri fokus dari dev console. Jika anda menjalankan kode berikut di konsol anda dan kemudian dengan cepat klik di jendela browser anda setelah, anda akan melihat ini fokus pencarian kotak:
setTimeout(function() { $('input[name="q"]').focus() }, 3000);
Adapun anda yang lain, salah satu hal yang telah memberi saya kesulitan di masa lalu adalah urutan peristiwa. Anda tidak dapat memanggil focus() pada elemen yang belum't telah melekat pada DOM. Memiliki elemen anda mencoba untuk fokus sudah melekat DOM?
Beberapa jawaban berikut sarankan menggunakan setTimeout
untuk menunda proses berfokus pada elemen target. Salah satu dari mereka menyebutkan bahwa target dalam dialog modal. Saya tidak bisa berkomentar lebih lanjut mengenai kebenaran dari `setTimeout'solution tanpa mengetahui rincian spesifik dari mana ia digunakan. Namun, saya pikir saya harus memberikan jawaban di sini untuk membantu orang-orang yang lari ke thread ini hanya seperti yang saya lakukan
Fakta sederhana dari masalah ini adalah bahwa anda tidak bisa fokus pada elemen yang belum terlihat*. Jika anda menjalankan ke dalam masalah ini memastikan bahwa target benar-benar terlihat ketika mencoba untuk fokus itu dibuat. Dalam kasus saya sendiri, saya melakukan sesuatu di sepanjang garis-garis ini
$('#elementid').animate({left:0,duration:'slow'});
$('#elementid').focus();
Ini tidak bekerja. Aku hanya menyadari apa yang sedang terjadi ketika saya dieksekusi $('#elementid').focus()` dari konsol yang apa bekerja. Perbedaan - dalam kode saya di atas target tidak ada kepastian bahwa target akan malah terlihat sejak animasi tidak dapat menyelesaikan. Dan ada petunjuk
$('#elementid').animate({left:0,duration:'slow',complete:focusFunction});
function focusFunction(){$('#elementid').focus();}
bekerja seperti yang diharapkan. Saya juga awalnya dimasukkan ke dalam setTimeout
solusi dan itu berhasil juga. Namun, sewenang-wenang dipilih timeout adalah terikat untuk memecahkan solusi cepat atau lambat tergantung pada bagaimana perlahan-lahan host perangkat pergi tentang proses untuk memastikan bahwa elemen target terlihat.
Hanya dalam kasus orang lain tersandung di pertanyaan ini dan memiliki situasi yang sama saya - saya mencoba untuk mengatur fokus setelah mengklik pada elemen lain, namun fokus didn't muncul untuk bekerja. Ternyata aku hanya butuh sebuah e.preventDefault();
- di sini's contoh:
$('#recipients ul li').mousedown(function(e) {
// add recipient to list
...
// focus back onto the input
$('#message_recipient_input').focus();
// prevent the focus from leaving
e.preventDefault();
});
Ini membantu:
Jika anda menelepon HTMLElement.focus() dari mousedown event handler, anda harus menelepon acara tersebut.preventDefault() untuk tetap fokus meninggalkan HTMLElement. Sumber: https://developer.mozilla.org/en/docs/Web/API/HTMLElement/focus
Aku menyadari hal ini lebih lama, tapi datang di hari ini. Tidak ada jawaban yang bekerja untuk saya, apa yang saya lakukan menemukan bahwa bekerja adalah setTimeout. Saya ingin fokus saya untuk ditempatkan pada input mengajukan modal, menggunakan setTimeout bekerja. Harap ini membantu!
Saya juga punya masalah ini. Solusi yang bekerja dalam kasus saya adalah menggunakan tabindex properti pada elemen HTML.
Saya menggunakan ng-repeat
untuk beberapa li unsur-unsur dalam daftar dan saya tidak mampu untuk membawa fokus ke li pertama menggunakan .focus(), jadi saya hanya menambahkan tabindex atribut untuk masing-li selama loop.
jadi sekarang <li ng-repeat="user pengguna melacak dengan $index" tabindex="{{$index+1}}"></li>
Yang +1 adalah indeks dimulai dari 0. Juga pastikan bahwa elemen hadir dalam DOM sebelum memanggil .focus() fungsi
Saya harap ini membantu.
Tambahkan penundaan sebelum focus(). 200 ms cukup
function focusAndCursor(selector){
var input = $(selector);
setTimeout(function() {
// this focus on last character if input isn't empty
tmp = input.val(); input.focus().val("").blur().focus().val(tmp);
}, 200);
}
Bagi mereka dengan masalah tidak bekerja karena anda digunakan "$(elemen).show()". Aku soal berikutnya dengan cara:
var textbox = $("#otherOption");
textbox.show("fast", function () {
textbox[0].focus();
});
Jadi anda tidak perlu timer, itu akan mengeksekusi setelah menunjukkan metode selesai.
TAMBAHAN SOLUSI Punya masalah yang sama di mana focus() didn't tampaknya bekerja tetapi akhirnya ternyata bahwa apa yang dibutuhkan adalah bergulir ke posisi yang benar: