TL; DR: Вам наплевать на старые браузеры?Используйте form.reportValidity()
.
Нужна поддержка устаревших браузеров?Читайте дальше.
На самом деле можно запустить вручную.
Я буду использовать простой JavaScript в своем ответе для улучшения возможности повторного использования, jQuery не требуется.
Примите следующую HTML-форму:
<form>
<input required>
<button type="button">Trigger validation</button>
</form>
И давайте захватим наши элементы пользовательского интерфейса в JavaScript:
var form = document.querySelector('form')
var triggerButton = document.querySelector('button')
Доннужна поддержка устаревших браузеров, таких как Internet Explorer?Это для вас.
Все современные браузеры поддерживают относительно новый reportValidity()
метод для form
элементов.
triggerButton.onclick = function () {
form.reportValidity()
}
Вот и все, мы закончили.Кроме того, вот простой CodePen , использующий этот подход.
Подход для старых браузеров
Ниже приведено подробное объяснение того, какreportValidity()
можно эмулировать в старых браузерах.
Однако вам не нужно самим копировать и вставлять эти блоки кода в ваш проект - есть ponyfill / polyfill легко доступны для вас.
Там, где reportValidity()
не поддерживается, нам нужно немного обмануть браузер.Итак, что мы будем делать?
- Проверьте правильность формы, позвонив
form.checkValidity()
.Это сообщит нам, если форма действительна, но не отображает пользовательский интерфейс проверки. - Если форма недействительна, мы создаем временную кнопку отправки и запускаем щелчок по ней.Поскольку форма недействительна, мы знаем , она не будет на самом деле отправлять, однако она покажет пользователю подсказки для проверки.Мы немедленно удалим кнопку временной отправки, чтобы она никогда не была видна пользователю.
- Если форма действительна, нам вообще не нужно вмешиваться и позволить пользователю продолжить.
В коде:
triggerButton.onclick = function () {
// Form is invalid!
if (!form.checkValidity()) {
// Create the temporary button, click and remove it
var tmpSubmit = document.createElement('button')
form.appendChild(tmpSubmit)
tmpSubmit.click()
form.removeChild(tmpSubmit)
} else {
// Form is valid, let the user proceed or do whatever we need to
}
}
Этот код будет работать практически во всех распространенных браузерах (я успешно проверил его до IE11).
Вот рабочий пример CodePen.