Ответ 1
Проект HTML5 определяет:
Алгоритм дезактивации значений выглядит следующим образом: Если значение элемента не является допустимым числом с плавающей запятой, вместо этого установите его в пустую строку.
Я полагаю, вы использовали бы значение по умолчанию "0", чтобы убедиться, что поле осталось нетронутым или если что-то недействительное было введено, поскольку, похоже, нет очевидного способа отличить два.
После прочтения спецификаций проверки и некоторых тестов (в Opera 10.54) я пришел к выводу, что:
<input id="email" type="email" value="blah">
document.getElementById("email").validity.typeMismatch // True
Не работает на <input type="number">
. Не уверен, должен ли он или если он работает. Однако свойство существует, хотя оно всегда возвращает False.
Вы также можете установить собственный метод проверки Ссылка 3