2013-03-13 1 views
1

У меня есть Javascript validation framework, который я создал, и я пытаюсь добавить к нему проверку HTML5. В моих рамках проверка выполняется путем привязки ограничений проверки к элементам с использованием атрибутов data-. Это несколько похоже на то, как проверка HTML5 происходит с использованием таких атрибутов, как required, min, max и т. Д.HTML5 Validation: Using element.validity.typeMismatch и element.validity.tooLong

У меня есть две проблемы прямо сейчас. Ну, они могут не быть проблемами, но я хотел бы лучше понять ситуацию, чтобы я мог решить, как двигаться вперед.

В первой проблеме у меня есть element.validity.typeMismatch, которая установлена ​​в true, если значение элемента не соответствует типу элемента. Например, если у вас есть недопустимое значение URL для элемента с type="url" или недействительным адресом электронной почты для элемента с type="email". Однако это поведение непоследовательно для чего-то вроде type="number". Причина непоследовательности в том, что браузер не позволит вам добавить недопустимые значения в input с type="number" (через пользовательский интерфейс или даже через DOM). В связи с этим element.validity.typeMismatch никогда не устанавливается в true и element.checkValidity() всегда возвращает true. Это поведение несовместимо с поведением на type="url" и type="email", где вы можете указать и element.validity.typeMismatch и element.checkValidity() вернуть ожидаемые значения.

У меня проблема с использованием maxlength. Существует ValidityState недвижимости под названием tooLong по адресу element.validity.tooLong. Похоже, что это значение никогда не установлено в true при взаимодействии с input прямо из браузера, потому что вы никогда не сможете ввести значение, которое больше, чем значение * maxlength. Кроме того, даже если вы можете установить значение , которое большеmaxlengthот DOM, element.validity.tooLong снова, никогда не устанавливается в true. Поэтому мне интересно, почему это свойство даже там, если оно более или менее бесполезно.

В настоящее время, как ожидается, что проверка HTML5 будет вести себя с этими ограничениями? Как сообщение об ошибке может быть создано для этих нарушений ограничений, если браузер не позволит вам ввести недопустимые значения?

ответ

1

Мне удалось найти больше разъяснений по этому вопросу. Оба W3C и WHATWG говорят:

typeMismatch

Контроль страдает от несоответствия типа.

[...]

Страдает от типа рассогласования

Когда элемент управления, который позволяет вводить произвольный пользователь, имеет значение, которое не находится в правильном синтаксисе (электронная почта, URL-адрес).

Так кажется, что это значение устанавливается только в случае type быть установлен либо url или email. Во всех остальных случаях он не будет установлен, потому что элементы input не позволят пользователю устанавливать свои значения на недопустимые (вручную или программно).

К сожалению, это не ответит на проблему с помощью tooLong; в спецификации указано, что это будет установлено, если входное значение слишком велико, но это, похоже, не так.