TL; DR: Sie interessieren sich nicht für alte Browser? Verwenden Sie form.reportValidity()
.
Benötigen Sie Unterstützung für ältere Browser? Weiter lesen.
Es tatsächlich ist möglich Trigger Validierung von Hand.
Ich werde in meiner Antwort einfaches JavaScript verwenden, um die Wiederverwendbarkeit zu verbessern. Es wird keine jQuery benötigt.
Nehmen Sie das folgende HTML-Formular an:
<form>
<input required>
<button type="button">Trigger validation</button>
</form>
Und lassen Sie uns unsere UI-Elemente in JavaScript greifen:
var form = document.querySelector('form')
var triggerButton = document.querySelector('button')
Benötigen Sie keine Unterstützung für ältere Browser wie Internet Explorer? Das ist für dich.
Alle modernen Browser unterstützen die reportValidity()
Methode für form
Elemente.
triggerButton.onclick = function () {
form.reportValidity()
}
Das war's, wir sind fertig. Auch hier ist ein einfaches CodePen mit diesem Ansatz.
Ansatz für ältere Browser
Im Folgenden finden Sie eine detaillierte Erklärung, wie reportValidity()
in älteren Browsern emuliert werden kann.
Allerdings müssen Sie nicht diese Codeblöcke in das Projekt selbst kopieren und einfügen müssen - es ist ein ponyfill / polyfill für Sie zur Verfügung.
Wo dies reportValidity()
nicht unterstützt wird, müssen wir den Browser ein wenig austricksen. Was machen wir jetzt?
- Überprüfen Sie die Gültigkeit des Formulars durch einen Anruf
form.checkValidity()
. Dies teilt uns mit, ob das Formular gültig ist, zeigt jedoch nicht die Validierungs-Benutzeroberfläche an.
- Wenn das Formular ungültig ist, erstellen wir eine temporäre Senden-Schaltfläche und lösen einen Klick darauf aus. Da das Formular nicht gültig ist, wissen wir, dass es nicht tatsächlich gesendet wird. Dem Benutzer werden jedoch Validierungshinweise angezeigt. Wir werden die temporäre Senden-Schaltfläche sofort entfernen, damit sie für den Benutzer niemals sichtbar ist.
- Wenn das Formular gültig ist, müssen wir uns überhaupt nicht einmischen und den Benutzer fortfahren lassen.
In Code:
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
}
}
Dieser Code funktioniert in so ziemlich jedem gängigen Browser (ich habe ihn erfolgreich bis auf IE11 getestet).
Hier ist ein funktionierendes CodePen-Beispiel.