TL; DR: Nie przejmujesz się starymi przeglądarkami? Użyj form.reportValidity()
.
Potrzebujesz obsługi starszych przeglądarek? Czytaj.
W rzeczywistości możliwe jest ręczne uruchomienie walidacji.
W mojej odpowiedzi użyję zwykłego JavaScript, aby poprawić możliwość ponownego użycia, nie jest potrzebne żadne jQuery.
Załóżmy następujący formularz HTML:
<form>
<input required>
<button type="button">Trigger validation</button>
</form>
Chwyćmy nasze elementy UI w JavaScript:
var form = document.querySelector('form')
var triggerButton = document.querySelector('button')
Nie potrzebujesz obsługi starszych przeglądarek, takich jak Internet Explorer? To jest dla ciebie.
Wszystkie nowoczesne przeglądarki obsługują ten reportValidity()
sposób na form
elementy.
triggerButton.onclick = function () {
form.reportValidity()
}
To wszystko, skończyliśmy. Również tutaj jest prosty CodePen użyciu tego podejścia.
Podejście dla starszych przeglądarek
Poniżej znajduje się szczegółowe wyjaśnienie, w jaki sposób reportValidity()
można emulować w starszych przeglądarkach.
Jednak nie musisz samodzielnie kopiować i wklejać tych bloków kodu do swojego projektu - jest łatwo dostępny ponyfill / polyfill .
Tam, gdzie reportValidity()
nie jest obsługiwany, musimy trochę oszukać przeglądarkę. Więc co zrobimy?
- Sprawdź ważność formularza dzwoniąc
form.checkValidity()
. To powie nam, czy formularz jest prawidłowy, ale nie pokaże interfejsu użytkownika weryfikacji.
- Jeśli formularz jest nieprawidłowy, tworzymy tymczasowy przycisk przesyłania i uruchamiamy jego kliknięcie. Ponieważ formularz jest nieprawidłowy, wiemy, że w rzeczywistości nie zostanie przesłany, jednak wyświetli wskazówki dotyczące weryfikacji użytkownikowi. Natychmiast usuniemy tymczasowy przycisk przesyłania, aby nigdy nie był widoczny dla użytkownika.
- Jeśli formularz jest ważny, nie musimy w ogóle ingerować i pozwolić użytkownikowi kontynuować.
W kodzie:
triggerButton.onclick = function () {
if (!form.checkValidity()) {
var tmpSubmit = document.createElement('button')
form.appendChild(tmpSubmit)
tmpSubmit.click()
form.removeChild(tmpSubmit)
} else {
}
}
Ten kod będzie działał w prawie każdej popularnej przeglądarce (przetestowałem go pomyślnie aż do IE11).
Oto działający przykład CodePen.