Для валюты я бы предложил:
<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 "step", "min" и "pattern" будут проверяться при отправке формы, а не onblur. Вам не нужно, step
если у вас есть, pattern
и вам не нужно, pattern
если у вас есть step
. Таким образом, вы можете вернуться к step="any"
моему коду, так как шаблон будет проверять его в любом случае.
Если вы хотите проверить onblur, я считаю, что предоставление пользователю визуальной подсказки также полезно, как окрашивание фона в красный цвет. Если браузер пользователя не поддерживает, type="number"
он вернется к type="text"
. Если браузер пользователя не поддерживает проверку шаблона HTML5, мой фрагмент JavaScript не препятствует отправке формы, но дает визуальный намек. Таким образом, для людей с плохой поддержкой HTML5 и людей, пытающихся взломать базу данных с отключенным JavaScript или подделывать HTTP-запросы, вам все равно придется снова проверять на сервере. Пункт с проверкой на переднем конце для лучшего пользовательского опыта. Таким образом, пока большинство ваших пользователей имеют хороший опыт, можно полагаться на функции HTML5, если код все еще работает, и вы можете проверить его на бэкэнде.