Saya punya <input type="number">
dan saya ingin membatasi input pengguna ke angka murni atau angka dengan desimal hingga 2 tempat desimal.
Pada dasarnya, saya meminta input harga.
Saya ingin menghindari melakukan regex. Apakah ada cara untuk melakukannya?
<input type="number" required name="price" min="0" value="0" step="any">
type="text"
anyways, jadi apa masalahnya?Jawaban:
Alih-alih
step="any"
, yang memungkinkan untuk sejumlah tempat desimal, gunakanstep=".01"
, yang memungkinkan hingga dua tempat desimal.Lebih detail dalam spesifikasi: https://www.w3.org/TR/html/sec-forms.html#the-step-attribute
sumber
500.12345
di salah satu input, mungkin pemahaman kita tentang persyaratan berbeda.:valid
dan:invalid
diterapkan seperti yang diharapkan.Jika ada yang mencari regex yang memungkinkan hanya angka dengan 2 desimal opsional
Sebagai contoh, saya menemukan solusi di bawah ini cukup dapat diandalkan
HTML:
JS / JQuery:
sumber
setTimeout()
is untuk menunggukeydown
acara selesai sebelum mengaturnewVal
(kalau tidak akan sama denganoldVal
). Namun, dengan batas waktu 0, tidak ada gunanya dan tidak berfungsi karena kedua nilai seringkali sama (di Firefox). Jika Anda mengaturnya ke 1, misalnya, itu berfungsi dengan baik.Untuk mata uang, saya sarankan:
Lihat http://jsfiddle.net/vx3axsk5/1/
Properti HTML5 "langkah", "min" dan "pola" akan divalidasi ketika formulir dikirimkan, bukan di blur. Anda tidak perlu
step
jika Anda memilikipattern
dan Anda tidak perlupattern
jika Anda punyastep
. Jadi Anda bisa kembali kestep="any"
dengan kode saya karena pola akan memvalidasinya.Jika Anda ingin memvalidasi onblur, saya yakin memberi pengguna isyarat visual juga membantu seperti mewarnai latar belakang merah. Jika browser pengguna tidak mendukung
type="number"
itu akan mundur ketype="text"
. Jika browser pengguna tidak mendukung validasi pola HTML5, cuplikan JavaScript saya tidak mencegah pengiriman formulir, tetapi memberikan isyarat visual. Jadi untuk orang-orang dengan dukungan HTML5 yang buruk, dan orang-orang yang mencoba meretas ke dalam basis data dengan JavaScript dinonaktifkan atau memalsukan Permintaan HTTP, Anda harus memvalidasi lagi di server. Poin dengan validasi di front-end adalah untuk pengalaman pengguna yang lebih baik. Jadi, selama sebagian besar pengguna Anda memiliki pengalaman yang baik, tidak masalah untuk mengandalkan fitur HTML5 asalkan kode tersebut masih berfungsi dan Anda dapat memvalidasi di back-end.sumber
pattern
tidak berfungsi untukinput type=number
:<input type="number"> elements do not support use of the pattern attribute for making entered values conform to a specific regex pattern. The rationale for this is that number inputs can't contain anything except numbers, and you can constrain the minimum and maximum number of valid digits using the min and max attributes, as explained above.
Langkah 1: Kaitkan kotak input nomor HTML Anda ke acara pertukaran
atau dalam kode HTML
Langkah 2: Tulis
setTwoDecimalPlace
metodenyaAnda dapat mengubah jumlah tempat desimal dengan memvariasikan nilai yang diteruskan ke
toFixed()
metode. Lihat dokumen MDN .sumber
Saya menemukan menggunakan jQuery adalah solusi terbaik saya.
sumber
Coba ini untuk memungkinkan hanya 2 desimal dalam tipe input
Atau Gunakan jQuery seperti yang disarankan oleh @SamohtVII
sumber
Gunakan kode ini
Secara default, nilai Langkah untuk elemen Input HTML5 adalah langkah = "1".
sumber
hanya menulis
lang = 'nb "memungkinkan Anda menulis angka desimal Anda dengan koma atau titik
sumber
Pada masukan:
Pada skrip:
sumber