TL; DR: Vous ne vous souciez pas des anciens navigateurs? Utilisez form.reportValidity()
.
Besoin de la prise en charge de l'ancien navigateur? Continuer à lire.
Il est en fait possible de déclencher la validation manuellement.
J'utiliserai du JavaScript brut dans ma réponse pour améliorer la réutilisabilité, aucun jQuery n'est nécessaire.
Supposons le formulaire HTML suivant:
<form>
<input required>
<button type="button">Trigger validation</button>
</form>
Et prenons nos éléments d'interface utilisateur en JavaScript:
var form = document.querySelector('form')
var triggerButton = document.querySelector('button')
Vous n'avez pas besoin de support pour les anciens navigateurs comme Internet Explorer? Ceci est pour vous.
Tous les navigateurs modernes prennent en charge la reportValidity()
méthode sur les form
éléments.
triggerButton.onclick = function () {
form.reportValidity()
}
Voilà, nous avons terminé. En outre, voici un codePen simple utilisant cette approche.
Approche pour les navigateurs plus anciens
Vous trouverez ci-dessous une explication détaillée de la manière dont reportValidity()
peut être émulée dans les anciens navigateurs.
Cependant, vous n'avez pas besoin de copier et coller ces blocs de code dans votre projet vous-même - il existe un ponyfill / polyfill facilement disponible pour vous.
Là où ce reportValidity()
n'est pas pris en charge, nous devons tromper un peu le navigateur. Alors, que ferons-nous?
- Vérifiez la validité du formulaire en appelant
form.checkValidity()
. Cela nous dira si le formulaire est valide, mais ne montrera 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 dessus. Étant donné que la forme n'est pas valide, nous savons qu'il ne fait toutefois présenter, il montrera des notes 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 du tout besoin d'intervenir et de laisser l'utilisateur continuer.
Dans du 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 à peu près tous les navigateurs courants (je l'ai testé avec succès jusqu'à IE11).
Voici un exemple de CodePen fonctionnel.