Вступление #

Для работы валидации можно использовать класс .js-form-validation по умолчанию. Валидация формы реализована на базе Constraint Validation API.

Установка #

Пример разметки и инициализации валидации для отдельной формы.

	<form class="js-form-validation">
		<input
			type="text"
			name="username"
			placeholder="Ваше имя"
			required
		/>

		<input
			type="email"
			name="email"
			placeholder="Ваш email"
			autocomplete
			required
		/>

		<input
			type="tel"
			name="phone"
			pattern=".{16,16}"
			placeholder="Ваш телефон"
			data-validation-options='{
				"messageError": "Телефон должен быть в формате +7(XXX)XXX-XX-XX."
			}'
			required
		/>

		<textarea
			name="message"
			cols="30"
			rows="10"
			placeholder="Сообщение(не обязательно)"
		></textarea>

		<button
			class="button button--brand"
			type="submit"
		>
			Отправить
		</button>
	</form>
const options = {
	className: {
		form: {
			main: 'my-validation-form',
			init: 'my-validation-form-init',
		},

		field: {
			main: 'my-validation-field',
			valid: 'my-validation-field--valid',
			invalid: 'my-validation-field--invalid',
		},

		message: {
			main: 'my-validation-message',
			show: 'my-validation-message--show',
			error: 'my-validation-message--error',
			content: 'my-validation-message__content',
		}
	},
}

BasicFormValidation.init('.my-form', options)
BasicFormValidation.init(document.querySelector('.my-form'), options)
BasicFormValidation.init(document.querySelectorAll('.my-form'), options)

// или

BasicFormValidation.init() // по умолчанию инициaлизирует элементы с классом .js-form-validation

Конфигурация #

Настройки, заданные с использованием data-атрибутов.

data-validation-options #

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

	<input
		type="tel"
		name="phone"
		pattern=".{16,16}"
		placeholder="Ваш телефон"
		data-validation-options='{
			"messageContainer": "#container-validation-message",
			"messageError": "Телефон должен быть в формате +7(XXX)XXX-XX-XX."
		}'
		required
	/>
	<div id="container-validation-message"></div>

	<input
		type="file"
		name="file"
		placeholder="Загрузите файл"
		data-validation-options='{
			"maxSize": {
				"value": "2097152",
				"messageError": "Превышен максимально допустимый размер файла(<b>2МБ</b>)."
			}
		}'
		required
	/>

Параметры:

Название Тип Описание
messageContainer string id или класс индивидуального контейнера, в котором будет отображаться сообщения о валидации поля.
messageError string Сообщение об ошибке валидации поля. Так же принимает полноценную html-разметку.
maxSize object Параметр для валидации размера загружаемого файла в поле file.
Параметр содержит две опции:
1). value — Максимальный допустимый размер файла, указанный в байтах;
2). messageError — Сообщение, которое будет отображаться в случае ошибки при валидации размера файла.

Методы #

isValid() #

Проверить статус валидации формы. В ответ возращает одно из значений:

  • true — Форма проходит валидацию;
  • false — Форма не проходит валидацию.
BasicFormValidation.isValid('.my-form-validation') // принимает значение типа Object или String

update() #

Обновить список полей и статус валидации формы.

BasicFormValidation.update('.my-form-validation') // принимает значение типа Object или String

Экземпляр #

У каждого инициализированного элемента есть свой экземпляр.

const myFormValidation = document.querySelector('.my-form-validation')

console.log(myFormValidation.BasicFormValidation) // пример экземпляра

Прослушивание событий #

Можно прослушать события элемента и получить нужные параметры.

validation:change #

Срабатывает при изменении значений полей.

Параметры:

Название Тип Описание
event.detail.target object Поле, у которого изменилось значение.
event.detail.isValid object Статус валидации поля:
1). true — Поле заполнено правильно;
2). false — Поле не прошло валидацию.
const myFormValidation = document.querySelector('.my-form-validation')

myFormValidation.addEventListener(
	'validation:change',
	function () {
		console.log(event.detail) // параметры
	},
	false,
)