Bagaimana saya bisa mendapatkan nilai "nyata" dari suatu <input type="number">
bidang?
Saya memiliki sebuah input
kotak, dan saya menggunakan jenis input HTML5 yang lebih baru number
:
<input id="edQuantity" type="number">
Ini sebagian besar didukung di Chrome 29:
Yang saya perlukan sekarang adalah kemampuan untuk membaca nilai "mentah" yang telah dimasukkan pengguna di kotak masukan. Jika pengguna telah memasukkan nomor:
kemudian edQuantity.value = 4
, dan semuanya baik-baik saja.
Tetapi jika pengguna memasukkan teks yang tidak valid, saya ingin mewarnai kotak input dengan warna merah:
Sayangnya, untuk type="number"
kotak masukan, jika nilai di kotak teks bukan angka maka value
mengembalikan string kosong:
edQuantity.value = "" (String);
(setidaknya di Chrome 29)
Bagaimana saya bisa mendapatkan nilai "mentah" dari sebuah <input type="number">
kontrol?
saya mencoba melihat-lihat daftar properti Chrome lainnya dari kotak input:
saya tidak melihat apa pun yang menyerupai masukan sebenarnya.
Saya juga tidak dapat menemukan cara untuk mengetahui apakah kotak itu "kosong" , atau tidak. Mungkin saya bisa menyimpulkan:
value isEmpty Conclusion
============= ============= ================
"4" false valid number
"" true empty box; not a problem
"" false invalid text; color it red
Catatan : Anda dapat mengabaikan semuanya setelah aturan horizontal; itu hanya pengisi untuk membenarkan pertanyaan itu. Juga: jangan bingung antara contoh dengan pertanyaan. Orang mungkin ingin jawaban untuk pertanyaan ini untuk alasan lainnya selain mewarnai kotak merah (Salah satu contoh: mengubah teks "four"
ke dalam latin "4"
simbol selama acara onBlur)
Bagaimana saya bisa mendapatkan nilai "mentah" dari sebuah <input type="number">
kontrol?
Bonus Membaca
sumber
number
bukan jenis input yang Anda cari; gunakantext
input normal .validity
negara - saya harapkantypeMismatch
tapi saya belum diperiksa sendiri.blah
adalah nomor yang tidak valid".Jawaban:
Menurut WHATWG , Anda seharusnya tidak bisa mendapatkan nilai kecuali itu adalah input numerik yang valid. Algoritme sanitasi kolom nomor masukan mengatakan browser seharusnya menyetel nilai ke string kosong jika masukan bukan nomor floating point yang valid.
Dengan menentukan type (
<input type="number">
) Anda meminta browser melakukan beberapa pekerjaan untuk Anda. Sebaliknya, jika Anda ingin dapat menangkap masukan non-numerik dan melakukan sesuatu dengannya, Anda harus bergantung pada bidang masukan teks yang sudah dicoba dan yang lama dan mengurai sendiri kontennya.The W3 juga memiliki spesifikasi yang sama dan menambahkan:
sumber
<input type="number">
) Anda meminta browser melakukan beberapa pekerjaan untuk Anda. Secara pribadi, saya hanya meminta browser seluler untuk menampilkan keypad numerik, dan mendapat validasi sebagai tambahan yang tidak menyenangkan. Sebagian besar masalah ini berasal dari fakta bahwatype
atribut menentukan baik aturan validasi maupun aturan tentang mekanisme input apa yang akan ditampilkan, tetapi sangat mungkin ingin menampilkan keyboard numerik ke pengguna seluler tanpa juga menginginkan validasi nomor diterapkan ke pengguna desktop. HTML 5.1 setidaknya akan menyelesaikan masalah ini pada akhirnya denganinputmode
atributnya.Itu tidak menjawab pertanyaan, tetapi solusi yang berguna adalah dengan memeriksanya
The
ValidityState
obyek memberikan petunjuk tentang apa yang masuk pengguna. Pertimbangkantype="number"
masukan dengan amin
danmax
setKami selalu ingin menggunakan
.validity.valid
.Properti lain hanya memberikan informasi bonus:
Anda harus memastikan bahwa browser mendukung validasi HTML5 sebelum menggunakannya:
Bonus
Spudly memiliki jawaban berguna yang dia hapus:
sumber
.validity
properti, tetapi tidak menangani dengan benar.valid
?!typeMismatch
mungkin masuk akal, tetapi itu hanya untuk jenis email atau url…required
).badInput
ditambahkan 20/11/20 . Tetapi tidak ada yang harusbadInput
melihat apakah masukan itu valid; mereka harus melihat.valid
. Ini mungkin (dan benar) untuk.badInput
menjadi salah, dan masih memiliki masukan yang tidak valid..valid
didefinisikan sebagai tidak adanya kesalahan validasi (Misalnya ketidakcocokan, luapan, aliran kurang), yang.badInput
hanya merupakan satu jenis kesalahan. Perhatikan grafik di atas.badInput
yang salah, tetapi inputnya masih tidak valid.sumber
Lacak semua tombol yang ditekan berdasarkan kode kuncinya
Saya kira seseorang dapat mendengarkan acara keyup dan menyimpan array dari semua karakter yang dimasukkan, berdasarkan kode kuncinya. Tapi itu tugas yang cukup membosankan dan mungkin rentan terhadap bug.
http://unixpapa.com/js/key.html
Pilih input dan dapatkan seleksi sebagai string
Semua kredit ke: int32_t
sumber
Delete
,Backspace
,Ctrl+X
,Ctrl+V
,Right-click-cut
,Right-click-paste
.