Совместное использование jQuery и Validator.js строится вокруг идеи перехвата событий формы, управления DOM-элементами и расширения стандартной валидации через удобные цепочки методов. Несмотря на появление современных фреймворков, подобная связка остаётся актуальной в проектах с классической архитектурой, где jQuery отвечает за взаимодействие с интерфейсом, а Validator.js — за правила проверки данных.
Работа начинается с подключения библиотек и инициализации логики
после загрузки DOM. В типичной структуре jQuery используется событие
$(document).ready, внутри которого происходит настройка
валидатора.
$(document).ready(function () {
const validator = new Validator();
});
В подобных сценариях Validator.js используется как отдельный слой логики, не зависящий от DOM напрямую, а jQuery обеспечивает привязку этой логики к форме и её элементам.
Основной механизм интеграции — обработка события submit.
jQuery позволяет централизованно перехватить отправку формы и передать
данные в Validator.js для проверки.
$(document).ready(function () {
const validator = new Validator();
$('#loginForm').on('submit', function (event) {
event.preventDefault();
const data = {
email: $('#email').val(),
password: $('#password').val()
};
const result = validator.validate(data);
if (result.isValid) {
this.submit();
} else {
renderErrors(result.errors);
}
});
});
Такой подход позволяет разделить ответственность: jQuery управляет событиями, Validator.js — правилами проверки.
Одной из ключевых задач является преобразование DOM-значений в структурированный объект. jQuery предоставляет удобный API для извлечения значений полей, но важно сохранять единый формат данных для Validator.js.
function collectFormData(form) {
return {
username: $(form).find('input[name="username"]').val(),
email: $(form).find('input[name="email"]').val(),
age: Number($(form).find('input[name="age"]').val())
};
}
Validator.js при этом работает исключительно с чистыми объектами, не завися от структуры HTML.
После получения результата валидации необходимо отобразить ошибки в интерфейсе. jQuery здесь используется для динамического управления классами и текстовыми узлами.
function renderErrors(errors) {
$('.error-message').remove();
Object.keys(errors).forEach(field => {
const message = errors[field];
const input = $('[name="' + field + '"]');
input.addClass('error');
$('<div class="error-message"></div>')
.text(message)
.insertAfter(input);
});
}
Такой механизм позволяет быстро обновлять интерфейс без перезагрузки страницы.
Интерактивная проверка полей реализуется через события
input и change. jQuery обеспечивает удобную
подписку на эти события, а Validator.js выполняет проверку отдельных
значений.
$(document).ready(function () {
const validator = new Validator();
$('#email').on('input', function () {
const value = $(this).val();
const result = validator.validateField('email', value);
toggleFieldState($(this), result);
});
});
function toggleFieldState(element, result) {
if (result.isValid) {
element.removeClass('error').addClass('valid');
} else {
element.removeClass('valid').addClass('error');
}
}
Такой подход снижает количество ошибок на этапе заполнения формы.
Validator.js позволяет добавлять собственные правила, которые затем могут быть использованы в jQuery-обработчиках.
validator.addRule('strongPassword', function (value) {
return value.length >= 8 && /[A-Z]/.test(value) && /[0-9]/.test(value);
});
Использование в обработке формы:
$('#password').on('input', function () {
const value = $(this).val();
const result = validator.runRule('strongPassword', value);
if (!result) {
$(this).addClass('error');
} else {
$(this).removeClass('error');
}
});
Такой механизм позволяет гибко расширять логику проверки без изменения основной структуры приложения.
При работе с несколькими формами jQuery обеспечивает удобный обход элементов DOM, а Validator.js применяет единые правила ко всем экземплярам.
$('form').each(function () {
$(this).on('submit', function (event) {
event.preventDefault();
const data = collectFormData(this);
const validator = new Validator();
const result = validator.validate(data);
if (!result.isValid) {
renderErrors(result.errors);
}
});
});
Такой подход позволяет централизовать логику и избежать дублирования кода.
Validator.js может быть расширен асинхронными проверками, например, для проверки уникальности email. jQuery предоставляет механизм AJAX-запросов.
validator.addAsyncRule('emailUnique', function (value) {
return $.ajax({
url: '/check-email',
method: 'POST',
data: { email: value }
});
});
Использование:
$('#email').on('blur', function () {
const value = $(this).val();
validator.runAsyncRule('emailUnique', value)
.then(function (isUnique) {
if (!isUnique) {
$('#email').addClass('error');
}
});
});
Асинхронные правила особенно полезны при работе с серверной валидацией.
jQuery позволяет использовать делегирование событий, что важно при динамически добавляемых элементах формы. Validator.js при этом не требует изменений, так как работает с переданными значениями.
$(document).on('input', '.dynamic-field', function () {
const validator = new Validator();
const value = $(this).val();
const result = validator.validateField($(this).data('rule'), value);
toggleFieldState($(this), result);
});
Делегирование снижает нагрузку на DOM и упрощает поддержку динамических интерфейсов.
В сложных интерфейсах важно поддерживать единое состояние формы. jQuery используется для управления визуальной частью, Validator.js — для логики состояния.
function updateFormState(form, result) {
if (result.isValid) {
$(form).find('button[type="submit"]').prop('disabled', false);
} else {
$(form).find('button[type="submit"]').prop('disabled', true);
}
}
Такой подход предотвращает отправку некорректных данных.
Некоторые правила зависят от нескольких полей одновременно, например подтверждение пароля. jQuery позволяет легко извлекать значения связанных элементов.
$('#confirmPassword').on('input', function () {
const password = $('#password').val();
const confirm = $(this).val();
const isValid = validator.validateMatch(password, confirm);
if (!isValid) {
$(this).addClass('error');
} else {
$(this).removeClass('error');
}
});
Validator.js при этом обеспечивает единый интерфейс для таких проверок.
При использовании кастомных элементов интерфейса jQuery остаётся инструментом для доступа к состоянию компонента, а Validator.js — для проверки логики.
$('.select-component').on('change', function () {
const value = $(this).data('value');
const result = validator.validateField('country', value);
toggleFieldState($(this), result);
});
Такой подход позволяет использовать валидацию независимо от того, как реализован UI.
Для сложных проектов правила Validator.js часто выносятся в отдельный модуль, а jQuery отвечает только за их применение.
const rules = {
email: ['required', 'email'],
password: ['required', 'strongPassword']
};
$(document).ready(function () {
const validator = new Validator(rules);
$('#form').on('submit', function (e) {
e.preventDefault();
const data = collectFormData(this);
const result = validator.validate(data);
if (!result.isValid) {
renderErrors(result.errors);
}
});
});
Такое разделение упрощает масштабирование проекта и поддержку кода.