Подтвердить что ты не робот

Входные атрибуты HTML5, доступ через Javascript?

как вы знаете, в спецификации HTML5 мы получили некоторые новые атрибуты для элементов <input>, таких как required и pattern. Это обеспечивает отличный способ проверки пользовательского ввода, и мы можем даже визуализировать его с помощью CSS и псевдоселекторов. Пример

HTML

<input type="number" pattern="\d+" required/>

CSS

input:required:valid {
    border: 1px solid green;
}

input:required:invalid {
    border: 1px solid red;
}

Если этот элемент <input> будет частью элемента <form>, пользователь не сможет отправить его в invalid state.

Однако, мой вопрос: что, если мы хотим использовать эти новые атрибуты без элементов <form>? Есть ли способ получить доступ к текущему состоянию такого <input> node через ECMAscript напрямую?

Любое событие? Любой слушатель?

4b9b3361

Ответ 1

Как указано @Zirak, существует метод checkValidity, часть API проверки ограничений.

var s = document.createElement('input');
s.checkValidity(); // true
s.required = true;
s.checkValidity(); // false

Однако checkValidity запускает недопустимое событие, если оно недействительно. (Форма будет выделена красным цветом.) Вместо этого вы можете использовать свойство willValidate (или свойство .validity.valid).

Кроме того, свойство validity довольно интересно посмотреть (более подробная информация о том, что означает каждое свойство в API проверки ограничений):

s.validity
    ValidityState
        customError: false
        patternMismatch: false
        rangeOverflow: false
        rangeUnderflow: false
        stepMismatch: false
        tooLong: false
        typeMismatch: false
        valid: false
        valueMissing: true

В этой статье отмечены различия в реализациях между браузерами: http://www.html5rocks.com/en/tutorials/forms/constraintvalidation/ (т.е. это беспорядок, как обычно.)

Вы также можете прослушать событие invalid, вызванное при отправке формы или при вызове метода checkValidity.

Демо: http://jsfiddle.net/XfV4z/

Ответ 2

Элементы ввода имеют свойство validity:

var i = document.getElementsByTagName('input')[0]
i.validity.valid // True or false

console.log(i.validity);

// Logs (when `1` is entered):

 ValidityState
   customError: false
   patternMismatch: false
   rangeOverflow: false
   rangeUnderflow: false
   stepMismatch: false
   tooLong: false
   typeMismatch: false
   valid: true
   valueMissing: false

Для получения более подробной информации я не буду копировать, отметьте Флориан Маргайн ответ