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.