Apa yang dimaksud dengan solusi Vanilla JS atau jQuery yang akan memilih semua konten kotak teks ketika kotak teks menerima fokus?
javascript
jquery
user-interface
Jon Erickson
sumber
sumber
Jawaban:
sumber
sumber
onmouseup="return false;"
jika Anda ingin pengguna dapat dengan bebas memilih dan mengedit teks setelah fokus di dalam kotak teks. Dengan kode ini, teks akan dikunci ke dalam situasi "pilih semua" dan pengguna tidak akan dapat mengeditnya kecuali jika pengguna mengetikkan teks baru atau menggunakan tombol panah untuk bergerak. Jujur ini terasa seperti perilaku yang sangat aneh dan tidak masuk akal kecuali kotak teks dimaksudkan untuk secara permanen tidak dapat diedit (dan karenanya dinonaktifkan).onmouseup="return false;"
jika Anda hanya ingin seleksi terjadi ketika pengguna pertama kali mengklik atau tab. Dan +1 untuk javascript vanilla!sumber
sumber
mouseup
acara: "begitu kursor berada di lapangan, mengklik di suatu tempat di dalam teks yang dipilih untuk menempatkan kursor di sana tidak berfungsi; klik secara efektif dinonaktifkan. Namun, untuk situasi di mana memilih seluruh teks pada fokus diinginkan, mungkin lebih kecil dari dua kejahatan. "jQuery bukan JavaScript yang lebih mudah digunakan dalam beberapa kasus.
Lihat contoh ini:
Sumber: Trik CSS , MDN
sumber
Ini bukan hanya masalah Chrome / Safari, saya mengalami perilaku yang sangat mirip dengan Firefox 18.0.1. Bagian yang lucu adalah bahwa ini tidak terjadi pada MSIE! Masalahnya di sini adalah peristiwa mouseup pertama yang memaksa untuk tidak memilih konten input, jadi abaikan saja kejadian pertama.
Pendekatan timeOut menyebabkan perilaku aneh, dan memblokir setiap acara mouseup Anda tidak dapat menghapus pilihan mengklik lagi pada elemen input.
sumber
HTML:
Menggunakan JS:
Menggunakan JQuery:
Menggunakan Bereaksi JS:
Dalam masing-masing komponen di dalam fungsi render -
sumber
onFocus={(e) => e.target.select()}
solusi saya adalah menggunakan batas waktu. Tampaknya bekerja ok
sumber
Ini juga akan berfungsi di iOS:
https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement/select
sumber
Saya tahu kode sebaris adalah gaya yang buruk, tetapi saya tidak ingin memasukkan ini ke file .js. Bekerja tanpa jQuery!
sumber
Jawaban di sini membantu saya sampai pada titik tertentu, tetapi saya punya masalah pada bidang input Nomor HTML5 ketika mengklik tombol atas / bawah di Chrome.
Jika Anda mengklik salah satu tombol, dan meninggalkan mouse di atas tombol angka akan terus berubah seolah-olah Anda menahan tombol mouse karena mouseup sedang dibuang.
Saya memecahkan ini dengan menghapus handler mouseup segera setelah dipicu seperti di bawah ini:
Semoga ini bisa membantu orang di masa depan ...
sumber
mouseup
ke teks field input saja dan tidaknumber
s. Masalah ini seharusnya tidak datang karena ituIni akan berhasil, Coba ini -
Bekerja di Safari / IE 9 dan Chrome, saya tidak mendapatkan kesempatan untuk menguji di Firefox.
sumber
Saya tahu sudah ada banyak jawaban di sini - tetapi yang ini belum ada sejauh ini; solusi yang juga berfungsi dengan konten yang dihasilkan ajax:
sumber
Saya dapat sedikit meningkatkan jawaban Zach dengan memasukkan beberapa panggilan fungsi. Masalah dengan jawaban itu adalah bahwa ia sepenuhnya menonaktifkan onMouseUp, sehingga mencegah Anda mengklik di dalam kotak teks setelah memiliki fokus.
Ini kode saya:
Ini sedikit perbaikan dari jawaban Zach. Ini bekerja dengan sempurna di IE, tidak bekerja sama sekali di Chrome, dan bekerja dengan kesuksesan bergantian di FireFox (secara harfiah setiap waktu lainnya). Jika seseorang memiliki gagasan tentang bagaimana membuatnya bekerja dengan andal di FF atau Chrome, silakan bagikan.
Bagaimanapun, saya pikir saya akan membagikan apa yang saya bisa untuk membuat ini sedikit lebih baik.
sumber
onMouseUp=""
danonMouseDown=""
bukan standar w3 yang benar. Mereka seharusnyaonmouseup=""
danonmousedown=""
. Seperti halnya atribut html lainnya, mereka harus ditulis dalam huruf kecil bukan dalam huruf unta.Seperti @Travis dan @Mari, saya ingin memilih otomatis ketika pengguna mengklik, yang berarti mencegah perilaku default suatu
mouseup
peristiwa, tetapi tidak mencegah pengguna mengklik sekitar. Solusi yang saya buat, yang bekerja di IE11, Chrome 45, Opera 32 dan Firefox 29 (ini adalah browser yang saya instal), didasarkan pada urutan peristiwa yang terlibat dalam klik mouse.Ketika Anda mengklik pada input teks yang tidak memiliki fokus, Anda mendapatkan acara ini (antara lain):
mousedown
: Sebagai tanggapan atas klik Anda. Penanganan standar meningkatfocus
jika perlu dan mengatur mulai seleksi.focus
: Sebagai bagian dari penanganan standarmousedown
.mouseup
: Selesai klik Anda, yang penanganan default-nya akan menetapkan akhir pemilihan.Ketika Anda mengklik pada input teks yang sudah memiliki fokus,
focus
acara dilewati. Karena @Travis dan @Mari sama-sama menyadari, penanganan standar darimouseup
kebutuhan hanya dapat dicegah jikafocus
terjadi. Namun, karena tidak adafocus
kejadian "tidak terjadi", kita perlu menyimpulkan ini, yang dapat kita lakukan di dalammousedown
handler.Solusi @ Mari mengharuskan jQuery diimpor, yang ingin saya hindari. Solusi @ Travis melakukan ini dengan memeriksa
document.activeElement
. Saya tidak tahu mengapa tepatnya solusinya tidak berfungsi di seluruh browser, tetapi ada cara lain untuk melacak apakah input teks memiliki fokus: cukup ikutifocus
danblur
acara.Berikut adalah kode yang berfungsi untuk saya:
Saya harap ini bisa membantu seseorang. :-)
sumber
sumber
Anda hanya perlu menambahkan atribut berikut:
Sebagai contoh:
(Jujur saya tidak tahu mengapa Anda membutuhkan yang lain.)
sumber
Ini bekerja untuk saya (memposting karena tidak ada jawaban tetapi dalam komentar)
sumber
Sunting: Per permintaan DavidG, saya tidak bisa memberikan detail karena saya tidak yakin mengapa ini berhasil, tapi saya percaya itu ada hubungannya dengan acara fokus yang merambat naik atau turun atau apa pun yang dilakukannya dan elemen input yang mendapatkan pemberitahuan itu menerima fokus. Mengatur batas waktu memberi elemen waktu untuk menyadari bahwa itu dilakukan.
sumber
Jika Anda mengaitkan acara bersama-sama, saya percaya itu menghilangkan kebutuhan untuk menggunakan
.one
seperti yang disarankan di tempat lain di utas ini.Contoh:
sumber
Catatan: Jika Anda pemrograman dalam ASP.NET, Anda dapat menjalankan skrip menggunakan ScriptManager.RegisterStartupScript di C #:
Atau cukup ketik skrip di halaman HTML yang disarankan di jawaban lain.
sumber
Saya menabur yang ini di suatu tempat, bekerja dengan sempurna!
sumber
Saya agak terlambat ke pesta, tetapi ini bekerja dengan sempurna di IE11, Chrome, Firefox, tanpa mengacaukan mouseup (dan tanpa JQuery).
sumber
focus
dengan masuk ke lapangan, Anda akan menemukan beberapa pendengar acaraSolusi saya berikutnya:
Jadi mouseup akan berfungsi biasanya, tetapi tidak akan membuat tidak dipilih setelah mendapatkan fokus dengan input
sumber