Для валюти я б запропонував:
<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>
Дивіться http://jsfiddle.net/vx3axsk5/1/
Властивості HTML5 "крок", "хв" та "шаблон" будуть перевірені під час подання форми, а не onblur. Вам не потрібно, step
якщо у вас є, pattern
і вам не потрібно, pattern
якщо у вас є step
. Таким чином, ви можете повернутися до step="any"
мого коду, оскільки шаблон буде його перевірити в будь-якому випадку.
Якщо ви хочете перевірити onblur, я вважаю, що надати користувачеві візуальну підказку також корисно, як фарбування фону в червоний колір. Якщо веб-переглядач користувача не підтримує type="number"
його, він стане резервним type="text"
. Якщо браузер користувача не підтримує перевірку шаблону HTML5, мій фрагмент JavaScript не заважає форму надсилати форму, але він надає візуальну підказку. Тож людям з поганою підтримкою HTML5 та людям, які намагаються зламати базу даних із відключеним JavaScript або підробляти HTTP-запити, вам потрібно знову перевірити їх на сервері. Точка з валідацією на передній частині - для кращого користувальницького досвіду. Тож, поки більшість ваших користувачів мають хороший досвід, непогано покладатися на функції HTML5 за умови, що код все ще буде працювати і ви зможете перевірити його на задній частині.