Saya menggunakan Validator Alat jQuery yang mengimplementasikan validasi HTML5 melalui jQuery. Sejauh ini sudah bekerja dengan baik kecuali untuk satu hal. Dalam spesifikasi HTML5, tipe input "angka" dapat memiliki bilangan bulat dan angka floating-point. Ini tampaknya sangat picik karena itu hanya akan menjadi validator berguna ketika bidang database Anda ditandatangani angka floating-point (untuk int unsigned Anda harus kembali ke validasi "pola" dan dengan demikian kehilangan fitur tambahan seperti naik dan turun panah untuk browser yang mendukungnya). Apakah ada tipe input lain atau mungkin atribut yang akan membatasi input hanya pada bilangan bulat yang tidak ditandatangani? Saya tidak dapat menemukannya, terima kasih.
EDIT
Ok, teman-teman, saya menghargai waktu dan bantuan Anda, tetapi saya melihat banyak pemilihan yang tidak selayaknya terjadi: D. Mengatur langkah ke 1 bukanlah jawaban karena tidak membatasi input. Anda masih bisa mengetikkan angka titik-mengambang negatif ke dalam kotak teks. Juga, saya mengetahui validasi pola (saya sebutkan di posting asli saya), tapi itu bukan bagian dari pertanyaan. Saya ingin tahu apakah HTML5 diizinkan membatasi input tipe "angka" ke nilai integer positif. Untuk pertanyaan ini, jawabannya adalah "tidak, tidak". Saya tidak ingin menggunakan validasi pola karena ini menyebabkan beberapa kelemahan saat menggunakan validasi jQuery Tools, tetapi sekarang tampaknya spesifikasi tidak memungkinkan cara yang lebih bersih untuk melakukan ini.
sumber
number
input (setidaknya dalam FF / Chrome / Safari) sekarang hanya menerima integer secara default, kecuali jika Anda menetapkan nilai eksplisit untukstep
attr yang memungkinkan nilai desimal; misalnya:step="0.01"
. MDN yang didokumentasikan di sini . Dalam dua pikiran tentang ini karena saya pikir ini adalah default yang masuk akal, tetapi juga perubahan yang melanggar (ya, itu telah mempengaruhi beberapa kode yang saya tulis).Jawaban:
https://www.w3.org/wiki/HTML/Elements/input/number
Yang terbaik yang dapat Anda capai dengan HTML saja
sumber
min
untuk1
karena ia ingin angka positif (dan nomor tidak non-negatif).<input type="number" min="0" step="1"/>
adalah jawaban yang paling benar untuk pertanyaan itu. Lagi pula, apa gunanya memiliki keduanyastep="1"
danpattern="\d+"
? Saya tidak bisa mengetikkan angka floating point dalam kedua kasus.Setel
step
atribut ke1
:Sepertinya ini agak buggy di Chrome saat ini sehingga mungkin bukan solusi terbaik saat ini.
Solusi yang lebih baik adalah dengan menggunakan
pattern
atribut, yang menggunakan ekspresi reguler untuk mencocokkan input:\d
adalah ungkapan reguler untuk angka,*
artinya ia menerima lebih dari satu. Ini adalah demo: http://jsfiddle.net/b8NrE/1/sumber
number
yang berisi karakter lain, maka Chrome akan menampilkan pesan kesalahan kepada Anda.submit
untuk memicu posting./\d*/.test(1.1) // true
pattern="\d*"
tidak sama dengan/\d*/
,pattern="\d*"
sama dengan/^(?:\d*)$/
, silakan lihat dokumentasi atribut pola HTML5 .Menggunakan kode ini, input ke bidang teks membatasi untuk memasukkan hanya digit. Pola adalah atribut baru yang tersedia dalam HTML 5.
Atribut atribut pola
sumber
Cara mudah menggunakan JavaScript:
sumber
replace(/(\..*)\./g, '$1')
.
hanya mengulangi sekali, misalnya123.556
dapat ditulis.Polanya bagus tetapi jika Anda ingin membatasi input hanya ke angka dengan type = "text", Anda dapat menggunakan input dan input seperti di bawah ini:
Saya suka untuk saya :)
sumber
Ini tidak hanya untuk HTML5 semua browser berfungsi dengan baik. coba ini
sumber
oninput
sebagai gantinyaPola selalu lebih disukai untuk pembatasan, coba
oninput
dan lakukanmin
1 untuk memasukkan hanya angka dari 1 dan seterusnyasumber
sudahkah Anda mencoba mengatur
step
atribut ke 1 seperti inisumber
Mungkin tidak cocok untuk setiap use case, tetapi
dapat melakukan pekerjaan dengan baik: biola .
Periksa dokumentasinya .
sumber
Ya, HTML5 tidak. Coba kode ini ( w3school ):
Lihat paremeter min dan maks? Saya mencobanya menggunakan Chrome 19 (berhasil) dan Firefox 12 (tidak berhasil).
sumber
Masukkan saja ke dalam kolom input Anda:
onkeypress='return event.charCode >= 48 && event.charCode <= 57'
sumber
Saya bekerja oh Chrome dan memiliki beberapa masalah, meskipun saya menggunakan atribut html. Saya berakhir dengan kode js ini
sumber
Setel
step="any"
. Bekerja dengan baik. Referensi: http://blog.isotoma.com/2012/03/html5-input-typenumber-and-decimalsfloats-in-chrome/sumber
Dari spesifikasi
Jadi Anda bisa mengaturnya ke
1
:sumber
Setel
step
atribut ke sembarang nomor float, misal 0,01 dan Anda siap melakukannya.sumber
sumber
Saat ini, tidak mungkin untuk mencegah pengguna dari menulis nilai desimal di input Anda hanya dengan HTML. Anda harus menggunakan javascript.
sumber
sumber
Di Future ™ (lihat Dapatkah Saya Menggunakan ), pada agen pengguna yang menyajikan keyboard untuk Anda, Anda dapat membatasi input teks hanya dengan angka
input[inputmode]
.sumber
inputmode
sebagian besar untuk perangkat genggam dan akan memicu tata letak keyboard yang benar, tetapi untuk komputer "normal" dengan keyboard, itu tidak akan mencegah memasuki apa pun yang Anda inginkan.