Untuk mata uang, saya sarankan:
<div><label>Amount $
<input type="number" placeholder="0.00" required name="price" min="0" value="0" step="0.01" title="Currency" pattern="^\d+(?:\.\d{1,2})?$" onblur="
this.parentNode.parentNode.style.backgroundColor=/^\d+(?:\.\d{1,2})?$/.test(this.value)?'inherit':'red'
"></label></div>
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 memiliki pattern
dan Anda tidak perlu pattern
jika Anda punya step
. 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 ke type="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.