TL;DR : Se désintéresser des anciens navigateurs ? Utiliser form.reportValidity()
.
Besoin d'un support pour les navigateurs anciens ? Lire la suite.
En fait, il s'agit est Il est possible de déclencher la validation manuellement.
J'utiliserai du JavaScript simple dans ma réponse pour améliorer la réutilisation, aucun jQuery n'est nécessaire.
Supposons le formulaire HTML suivant :
<form>
<input required>
<button type="button">Trigger validation</button>
</form>
Et saisissons nos éléments d'interface utilisateur en JavaScript :
var form = document.querySelector('form')
var triggerButton = document.querySelector('button')
Vous n'avez pas besoin de prendre en charge les navigateurs traditionnels tels qu'Internet Explorer ? Ceci est pour vous.
Tous les navigateurs modernes soutien el reportValidity()
méthode sur form
éléments.
triggerButton.onclick = function () {
form.reportValidity()
}
C'est tout, nous avons terminé. Aussi, nous vous invitons à vous rendre sur le site de la Commission européenne, voici un simple CodePen en utilisant cette approche.
Approche pour les anciens navigateurs
Vous trouverez ci-dessous une explication détaillée de la manière dont reportValidity()
peut être émulé dans les anciens navigateurs.
Cependant, vous n'avez pas besoin de copier-coller ces blocs de code dans votre projet vous-même. ponyfill / polyfill à votre disposition.
Où reportValidity()
n'est pas pris en charge, nous devons tromper un peu le navigateur. Qu'allons-nous faire ?
- Vérifier la validité du formulaire en appelant
form.checkValidity()
. Cela nous indiquera si le formulaire est valide, mais n'affichera pas l'interface de validation.
- Si le formulaire n'est pas valide, nous créons un bouton de soumission temporaire et déclenchons un clic sur celui-ci. Si le formulaire n'est pas valide, nous savoir il ne le fera pas en fait Cependant, il affichera des conseils de validation à l'utilisateur. Nous supprimerons immédiatement le bouton d'envoi temporaire, de sorte qu'il ne sera jamais visible par l'utilisateur.
- Si le formulaire est valide, nous n'avons pas besoin d'intervenir et nous laissons l'utilisateur continuer.
En 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
}
}
Ce code fonctionnera dans pratiquement tous les navigateurs courants (je l'ai testé avec succès jusqu'à IE11).
Voici un exemple fonctionnel de CodePen.