Кастомизация сообщений валидации формы HTML5: JS решение

Пройдите тест, узнайте какой профессии подходите
Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Для персонализации оповещений о валидации используйте метод setCustomValidity в сочетании с атрибутом required и обработчиками событий oninvalid и oninput. Вот как это выглядит на практике:

HTML
Скопировать код
<input required oninvalid="this.setCustomValidity('Введите требуемые данные')" oninput="this.setCustomValidity('')">

Таким образом, при неуспешной валидации поля ввода пользователь будет видеть подготовленное сообщение, которое исчезнет при начале редактирования поля.

Пошаговый план для смены профессии

Реализация различных уведомлений валидации

Чтобы настроить разнообразные сообщения для каждого отдельного случая, используйте функцию InvalidInputHelper:

JS
Скопировать код
function InvalidInputHelper(inputElement, options) {
  inputElement.oninvalid = function(e) {
    let message = "";
    if (!this.value) {
      message = options.emptyMessage;
    } else if (!this.validity.valid) {
      message = options.invalidMessage;
    }
    this.setCustomValidity(message);
  };
  
  inputElement.oninput = function(e) {
    this.setCustomValidity('');
  };
}

Теперь вы можете задействовать эту функцию для установки нужных сообщений:

JS
Скопировать код
InvalidInputHelper(document.getElementById('myInput'), {
  emptyMessage: "Похоже, вы забыли внести данные!",
  invalidMessage: "Ой, здесь кажется ошибка."
});

Детализация ошибок валидации

Чтобы ясно и точно указать пользователям на ошибку, используйте атрибут pattern и метод setCustomValidity, как показано ниже:

HTML
Скопировать код
<input 
  type="email" 
  required
  oninvalid="this.setCustomValidity(this.value ? 'Пожалуйста, проверьте корректность адреса электронной почты.' : 'Нам нужен ваш email!')"
  oninput="this.setCustomValidity('')"
  pattern="[a-zA-Z0-9]+@[a-zA-Z0-9]+\.[a-z]{3}"
>

Немедленная обратная связь

Сделайте вашу форму более интерактивной с помощью немедленных сообщений об ошибках:

HTML
Скопировать код
<input
  type="text"
  required
  oninvalid="this.setCustomValidity('Есть определенные правила для выбора имен пользователей, обратите на них внимание!')"
  oninput="this.setCustomValidity('')"
  pattern="^[a-zA-Z0-9_.-]*$"
>

Использование атрибутов данных для индивидуализации сообщений

Чтобы сделать код более модульным и избежать повторения, используйте атрибуты данных для хранения уведомлений о валидации:

HTML
Скопировать код
<input
  type="text"
  required
  data-empty-message="Это поле нуобходимо заполнить"
  data-invalid-message="Недопустимое имя пользователя"
  pattern="^[a-zA-Z0-9_.-]*$"
>

Вот как обработать их для всех обязательных полей одновременно:

JS
Скопировать код
document.querySelectorAll('input[required]').forEach(function(input) {
  input.oninvalid = function() {
    var message = this.value ? this.dataset.invalidMessage : this.dataset.emptyMessage;
    this.setCustomValidity(message);
  };
  input.oninput = function() {
    this.setCustomValidity('');
  };
});

Совместимость с браузерами

Приведенный выше способ настроек совместим со всеми основными браузерами, включая Chrome, Internet Explorer, Edge, Firefox и Opera.

Визуализация

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

HTML
Скопировать код
<input type="text" required oninvalid="this.setCustomValidity('Ответьте, пожалуйста, на вопрос')" />

Учет доступности

Оставайтесь внимательными к вопросу доступности вашего приложения. Используйте атрибуты ARIA и полные описания, тестируйте работу с со скринридерами для гарантии того, что сообщения будут восприниматься четко и ясно.

Проверка на стороне сервера

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

Проверь как ты усвоил материалы статьи
Пройди тест и узнай насколько ты лучше других читателей
Какой метод используется для установки пользовательского сообщения об ошибке валидации?
1 / 5