Да, по этой причине есть событие. Событие называется invalid
, когда пользователь пытается отправить for orr при проверке достоверности с помощью метода проверки HTML5 checkValidity()
. Это событие не вызывается blur
или чем-то подобным без вызова checkValidity()
только потому, что в ваших тегах input
есть атрибуты проверки HTML. Но он срабатывает до отправки формы.
Из W3C:
Когда вызывается метод checkValidity(
), если элемент
кандидат на подтверждение ограничения и не удовлетворяет его
ограничения, пользовательский агент должен запустить простое событие с именем invalid
это можно отменить (но в этом случае не имеет действия по умолчанию) на
элемент и вернуть ложь. В противном случае он должен возвращать только true без
делать что-то еще.
Например, у вас есть эта разметка:
<form>
<input type="text" name="foo" required title="Foo field"/>
<input type="submit"/>
</form>
Затем вам нужно вызвать checkValidity()
, чтобы вызвать событие invalid
, если данные input
недействительны:
document.querySelectorAll('input')[0].addEventListener('blur', function(){
this.checkValidity();
}, false);
document.querySelectorAll('input')[0].addEventListener('invalid', function(){
console.log('invalid fired');
}, false);
Посмотрите на мой пример здесь: http://jsbin.com/eluwir/2