Оптимизируйте проверку формы с помощью Magical Form Validation API

JavaScript CSS
Оптимизируйте проверку формы с помощью Magical Form Validation API
  • Автор: Чен Даютоу
  • гитхаб:KRISACHAN

предисловие

рыбья голова была в«Extreme Edition» использует чистый CSS для достижения супер-дерзкой проверки формы без смешивания воды.Статья поделилась наворотамиПроверка формы с помощью чистого CSS. Хотя опираясь только наCSSОн не может удовлетворить наши повседневные потребности в разработке, но с различными роднымиformПри проверке **API ** ситуация снова меняется.

Давайте узнаем ниже.

Связанные API

ValidityState

У каждого собственного компонента формы есть объект, описывающий состояние проверки элемента —ValidityState.

код показывает, как показано ниже:

账号:<input data-title="账号" placeholder="请输入正确的账号" pattern="\w{6,10}" name="account" type="text" required  id="input-text" />
<script>
  'use strict';
  const inputText = document.querySelector('#input-text');
  inputText.addEventListener('input', event => {
    console.table(inputText.validity);
  });
</script>

Результат выглядит следующим образом:

Конкретные свойства следующие:

Атрибуты необязательное значение иллюстрировать
valueMissing (только чтение) true / false Когда элемент формы установленrequiredсвойства иvalueКогда он пустой, онtrue, иначеfalse. Этот атрибут связан с псевдоклассом:valid / :invalid.
typeMismatch (только чтение) true / false Когда значение, введенное элементом формы, не соответствует типуtrue, иначеfalse. Этот атрибут связан с псевдоклассом:valid / :invalid.
patternMismatch (только чтение) true / false Когда значение, введенное в элементе формы, соответствуетpatternесли правила для атрибута не совпадаютtrue, иначеfalse. Этот атрибут связан с псевдоклассом:valid / :invalid.
слишком долго (только чтение) true / false Когда значение, введенное в элемент формы, длиннееmaxlengthатрибут, когдаtrue, иначеfalse. Этот атрибут связан с псевдоклассом:valid / :invalid.
слишком короткий (только для чтения) true / false Когда длина значения, введенного в элемент формы, меньшеminlengthатрибут, когдаtrue, иначеfalse. Этот атрибут связан с псевдоклассом:valid / :invalidтак же как:in-range / :out-of-range.
rangeUnderflow (только чтение) true / false Когда значение, введенное в элемент формы, меньшеminатрибут, когдаtrue, иначеfalse. Этот атрибут связан с псевдоклассом:valid / :invalidтак же как:in-range / :out-of-range.
rangeOverflow (только чтение) true / false Когда значение, введенное в элемент формы, превышаетmaxатрибут, когдаtrue, иначеfalse. Этот атрибут связан с псевдоклассом:valid / :invalidтак же как:in-range / :out-of-range.
stepMismatch (только чтение) true / false Когда значение, введенное в элементе формы, соответствуетstepне соответствует значениюtrue, иначеfalse. Этот атрибут связан с псевдоклассом:valid / :invalidтак же как:in-range / :out-of-range.
badInput (только чтение) true / false Когда значение, введенное для элемента формы, является неполным иUAКогда форма в ее текущем состоянии не должна быть отправленаtrue, иначеfalse.
customError (только для чтения) true / false Когда сообщение об ошибке элемента формы выдаетсяsetCustomValidity()Когда отображается вызов метода,true, иначеfalse.
Действителен (только для чтения) true / false Когда элемент формы проверяется какtrue, иначеfalse. Этот атрибут связан с псевдоклассом:valid / :invalid.

validationMessage

Возвращает, когда элемент формы правильно проверяется'', в противном случае вернуться к умолчанию или черезsetCustomValidity()Сообщение об ошибке для настроек метода.

Эффект следующий:

код показывает, как показано ниже:

账号:<input data-title="账号" placeholder="请输入正确的账号" pattern="\w{6,10}" name="account" type="text" required  id="input-text" />
<script>
    'use strict';
    const inputText = document.querySelector('#input-text');
    inputText.addEventListener('input', event => {
      console.table(inputText.validationMessage); // 验证错误时则返回 “请与所请求的格式保持一致。”
    });
</script>

willValidate

Доступное только для чтения свойство, которое возвращается, когда элемент формы требует проверки.true, иначеfalse.

Эффект следующий:

код показывает, как показано ниже:

账号:<input data-title="账号" placeholder="请输入正确的账号" pattern="\w{6,10}" name="account" type="text" required  id="input-text" />
<script>
    'use strict';
    const inputText = document.querySelector('#input-text');
    inputText.addEventListener('input', event => {
      console.table(inputText.willValidate); // true
    });
</script>

setCustomValidity()

setCustomValidity()Для установки элемента формыvalidationMessageценность . когда установленоsetCustomValidity()Позже,validity.customErrorстанетtrue. Если вам нужно сбросить, просто введите пустую строку.

Давайте посмотрим на рендеры:

код показывает, как показано ниже:

<form class="form" id="form" method="get" action="/api/form">
  	账号:
    <input id="account" data-title="账号" placeholder="请输入正确的账号" pattern="\w{6,10}" name="account" type="text" required />
    <input id="submit" name="button" type="submit" value="提交" />
</form>

<script>
    'use strict';
    account.setCustomValidity('自定义错误!');
    form.addEventListener('submit', event => {
      	event.preventDefault();
    });
</script>

checkValidity()

checkValidity()Используется для проверки правильности значения текущего элемента формы или всей формы, если даtrue, иначеfalse.

Эффект следующий:

код показывает, как показано ниже:

账号:<input data-title="账号" placeholder="请输入正确的账号" pattern="\w{6,10}" name="account" type="text" required  id="input-text" />
<script>
    'use strict';
    const inputText = document.querySelector('#input-text');
    inputText.addEventListener('input', event => {
      	console.table(inputText.checkValidity());
    });
</script>

reportValidity()

reportValidity()Используется для запуска и проверки того, проходит ли проверка значение элемента формы, если даtrue, иначеfalse.

Эффект следующий:

код показывает, как показано ниже:

账号:<input data-title="账号" placeholder="请输入正确的账号" pattern="\w{6,10}" name="account" type="text" required  id="input-text" />
<script>
    'use strict';
    const inputText = document.querySelector('#input-text');
    console.log(inputText.reportValidity());
</script>

Вышеупомянутая совместимость API выглядит следующим образом:

Изображение из:руб. newser.com/constraint-…

Простой пример отправки формы

Посмотрим на эффект:

код показывает, как показано ниже:

<style>
    .form > input {
      	margin-bottom: 10px;
    }
</style>
<form class="form" id="form" method="get" action="/api/form">
    账号:
    <input id="account" data-message="请输入正确的账号" data-title="账号" placeholder="请输入正确的账号" pattern="\w{6,10}" name="account" type="text" required />
    <br />
    密码:
    <input id="password" data-message="请输入正确的密码" data-title="密码" placeholder="请输入正确的密码" pattern="\w{6,10}" name="password" type="password" required />
    <br />
    <input id="submit" name="button" type="submit" value="提交" />
</form>
<script>
  'use strict';
  const inputs = [account, password];
  inputs.forEach(input => {
      input.addEventListener('input', () => {
          input.setCustomValidity('');
          input.checkValidity();
      });
      input.addEventListener('invalid', event => {
          const { message } = event.target.dataset;
          const { validity: { valid } } = input;
          input.setCustomValidity('');
          if (!valid) {
            	input.setCustomValidity(message);
          };
      });
  });
</script>

Приведенный выше пример можно найти в голове рыбы.Codepen:код спрей.IO/Антияпонское производство 77/…Посмотреть выше.

Примечание рыбьей головы: Ммммм, функция неплохая, если бы дело не в том, что собственный стиль компонента слишком уродлив, производительность разных браузеров непоследовательна, а стиль нельзя изменить, я думаю, должно быть много людей, разрабатывающих с родным API. . . Я не понимаю, почему W3C не раскрывает свойства модификации стиля. . .

использованная литература

  1. «Extreme Edition» использует чистый CSS для достижения супер-дерзкой проверки формы без смешивания воды.
  2. «Действительно ароматное предупреждение» Эти 33 очень полезных селектора CSS, возможно, вы никогда их не видели.
  3. form-control-infrastructure
  4. ValidityState
  5. HTMLFormElement
  6. Constraint validation API