Валидация
HTMX интегрируется с HTML5 Validation API и не отправляет запрос для формы, если проверяемое поле ввода невалидно. Это относится как к AJAX-запросам, так и к отправке через WebSocket.
Htmx генерирует события, связанные с валидацией, которые можно использовать для подключения кастомной логики проверки и обработки ошибок:
htmx:validation:validate— вызывается до вызова методаcheckValidity()элемента. Может использоваться для добавления пользовательской логики валидации.htmx:validation:failed— вызывается, когдаcheckValidity()возвращаетfalse, указывая на невалидный ввод.htmx:validation:halted— вызывается, когда запрос не отправлен из-за ошибок валидации. Конкретные ошибки можно найти в объектеevent.detail.errors.
Элементы, не являющиеся формами, по умолчанию не проходят валидацию перед отправкой запросов, но вы можете включить её, установив атрибут hx-validate в значение true.
Вот пример поля ввода, которое использует атрибут hx-on для обработки события htmx:validation:validate и требует, чтобы значение поля было foo:
<form id="example-form" hx-post="/test"> <input name="example" onkeyup="this.setCustomValidity('') // сбрасываем валидацию при вводе" hx-on:htmx:validation:validate="if(this.value != 'foo') { this.setCustomValidity('Введите значение foo') // задаем ошибку валидации htmx.find('#example-form').reportValidity() // сообщаем о проблеме }"></form>Вся клиентская валидация должна быть повторена на серверной стороне, так как её можно обойти.