Saya menggunakan kode ini untuk mencoba dan memilih semua teks di bidang ketika pengguna berfokus pada bidang. Yang terjadi adalah, ia memilih semua untuk sesaat, kemudian tidak dipilih dan kursor pengetikan dibiarkan di mana saya mengklik ...
$("input[type=text]").focus(function() {
$(this).select();
});
Saya ingin semuanya tetap terpilih.
Jawaban:
Coba gunakan
click
sebagai gantifocus
. Tampaknya berfungsi untuk acara mouse dan acara utama (setidaknya di Chrome / Mac):jQuery <versi 1.7:
jQuery versi 1.7+:
Ini demo
sumber
Saya pikir yang terjadi adalah ini:
Solusinya mungkin memanggil select () secara tidak sinkron, sehingga berjalan sepenuhnya setelah fokus ():
sumber
this
agak tak terduga dalam lingkup seperti itu. Saya akan memperbarui kodenya.Saya pikir ini solusi yang lebih baik. Tidak seperti hanya memilih dalam acara onclick, itu tidak mencegah memilih / mengedit teks dengan mouse. Ia bekerja dengan mesin rendering utama termasuk IE8.
http://jsfiddle.net/25Mab/9/
sumber
select()
tampaknya berhasil.$('input[autofocus]').select();
Ada beberapa jawaban yang layak di sini dan @ user2072367 adalah favorit saya, tetapi memiliki hasil yang tidak terduga ketika Anda fokus melalui tab daripada melalui klik. (hasil yang tidak terduga: untuk memilih teks secara normal setelah fokus melalui tab, Anda harus mengklik satu kali tambahan)
Biola ini memperbaiki bug kecil itu dan juga menyimpan $ (ini) dalam variabel untuk menghindari seleksi DOM yang berlebihan. Saksikan berikut ini! (:
Diuji dalam IE> 8
sumber
Setelah ditinjau dengan cermat, saya mengusulkan ini sebagai solusi yang jauh lebih bersih dalam utas ini:
Demo di jsFiddle
Masalah:
Berikut sedikit penjelasannya:
Pertama, mari kita lihat urutan peristiwa saat Anda mengarahkan mouse ke tab bidang.
Kami dapat mencatat semua peristiwa yang relevan seperti ini:
Beberapa browser mencoba memposisikan kursor selama
mouseup
atauclick
acara. Ini masuk akal karena Anda mungkin ingin memulai tanda sisipan dalam satu posisi dan menyeret untuk menyorot beberapa teks. Itu tidak dapat membuat penunjukan tentang posisi caret sampai Anda benar-benar mengangkat mouse. Jadi fungsi yang ditanganifocus
ditakdirkan untuk merespons terlalu dini, meninggalkan browser untuk mengganti posisi Anda.Tapi intinya adalah kita benar-benar ingin menangani acara fokus. Ini memberi tahu kami saat pertama kali seseorang memasuki bidang. Setelah itu, kami tidak ingin terus mengesampingkan perilaku pemilihan pengguna.
Solusinya:
Alih-alih, di dalam
focus
pengendali acara, kami dapat dengan cepat melampirkan pendengar untuk acaraclick
(klik di) dankeyup
(tab di) yang akan diaktifkan.Kami hanya ingin memecat acara sekali. Kita bisa menggunakan
.one("click keyup)
, tetapi ini akan memanggil event handler sekali untuk setiap jenis acara . Sebagai gantinya, segera setelah mouse atau keyup ditekan, kami akan memanggil fungsi kami. Hal pertama yang akan kami lakukan, adalah menghapus handler untuk keduanya. Dengan begitu, tidak masalah apakah kita melakukan tab atau mous. Fungsi tersebut harus dijalankan tepat sekali.Sekarang, kita dapat menelepon
select()
setelah browser melakukan pemilihan sehingga kami yakin untuk menimpa perilaku default.Akhirnya, untuk perlindungan ekstra, kita dapat menambahkan ruang nama acara ke
mouseup
dankeyup
fungsinya sehingga.off()
metode ini tidak menghapus pendengar lain yang mungkin sedang bermain.Diuji dalam IE 10+, FF 28+, & Chrome 35+
Atau, jika Anda ingin memperpanjang jQuery dengan fungsi yang disebut
once
yang akan memunculkan tepat sekali untuk sejumlah acara :Kemudian Anda dapat menyederhanakan kode lebih lanjut seperti ini:
Demo di biola
sumber
click
acara yang lebih jauh dari pipamouseup
. Karena kami ingin menangani akhir pemilihan selambat mungkin untuk memberi kami kesempatan paling besar untuk mengesampingkan peramban, menggunakan klik sebagai ganti mouseup harus melakukan trik. Diuji dalam FF, Chrome, dan IE.one
tidak akan memotongnya sebagai "Pawang dieksekusi sekali per elemen per jenis peristiwa . Secara otomatis akan mematikan acara yang memecatnya, tetapi yang lain masih akan tetap ada, danoff
menangani keduanya. Lihat saya pertanyaan: fungsi yang akan memecat tepat sekali untuk sejumlah acaraIni akan melakukan pekerjaan dan menghindari masalah bahwa Anda tidak dapat lagi memilih bagian dari teks dengan mouse.
sumber
Versi ini berfungsi pada iOS dan juga memperbaiki drag-to-select standar pada windows chrome
http://jsfiddle.net/Zx2sc/2/
sumber
Masalah dengan sebagian besar solusi ini adalah bahwa mereka tidak berfungsi dengan benar ketika mengubah posisi kursor dalam bidang input.
The
onmouseup
event perubahan posisi kursor dalam bidang, yang dipecat setelahonfocus
(setidaknya dalam Chrome dan FF). Jika Anda membuang tanpa syaratmouseup
maka pengguna tidak dapat mengubah posisi kursor dengan mouse.Kode secara kondisional akan mencegah
mouseup
perilaku default jika bidang saat ini tidak memiliki fokus. Ini berfungsi untuk kasus ini:Saya telah menguji ini dalam Chrome 31, FF 26 dan IE 11.
sumber
Menemukan solusi hebat membaca utas ini
sumber
Saya berasal dari akhir 2016 dan kode ini hanya berfungsi di versi terbaru jquery (jquery-2.1.3.js dalam kasus ini).
sumber
saya menggunakan FF 16.0.2 dan jquery 1.8.3, semua kode dalam jawaban tidak bekerja.
Saya menggunakan kode seperti ini dan berfungsi.
sumber
$("input[type=text]").on('click', function () { $(this).focus.select(); })
menyebabkan fokus dan pemilihan terjadi ketika pengguna mengklik kotak, karena dijalankan ketika pengguna mengklik kotak. Tanpa event handler, kode tidak menjawab pertanyaan, karenanya downvote dan komentar. Pada dasarnya, Anda mendapatkan bagian "semua teks saat ini dipilih" tetapi bukan bagian "ketika ia memilih bidang".Gunakan clearTimeout untuk keamanan lebih jika Anda beralih dengan cepat di antara dua input .. clearTimeout membersihkan waktu lama ...
sumber
Bekerja sangat baik dengan JavaScript asli
select()
.atau secara umum:
sumber
Atau Anda bisa menggunakan
<input onclick="select()">
Works perfect.sumber
Anda dapat menggunakan kode sederhana:
sumber
sumber
$.ready
salah. Anda harus melewati fungsi untuk membuatnya menundaattr
sampai dokumen siap. Anda melakukannya segera lalu meneruskan koleksi elemen ke$.ready
.addEventListener
.Saya selalu menggunakan
requestAnimationFrame()
untuk melompati mekanisme post-event internal dan ini bekerja dengan sempurna di Firefox. Belum diuji di Chrome.sumber