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.