J'ai un formulaire avec plusieurs jeux de champs différents. J'ai du Javascript qui affiche les jeux de champs aux utilisateurs un par un. Pour les navigateurs prenant en charge la validation HTML5, je serais ravi de l'utiliser. Cependant, je dois le faire selon mes conditions. J'utilise JQuery.
Lorsqu'un utilisateur clique sur un lien JS pour passer au jeu de champs suivant, j'ai besoin que la validation se produise sur le jeu de champs actuel et empêche l'utilisateur d'avancer en cas de problème.
Idéalement, lorsque l'utilisateur perd le focus sur un élément, la validation aura lieu.
Actuellement, novalidate fonctionne et utilise Javascript. Préfère utiliser la méthode native. :)
la source
$('<input type="submit">').hide().appendTo($myForm).click().remove();
form.submit()
travail ne serait-il pas parfait ? Ou HTML5 nécessite-t-il un bouton d'envoi pour la validation maintenant?.submit()
ne fonctionne pas pour moi. La solution de @ philfreo fonctionne. Hmm.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:
Et prenons nos éléments d'interface utilisateur en JavaScript:
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 lesform
éléments.Voilà, nous avons terminé. En outre, voici un codePen simple utilisant cette approche.
Approche pour les navigateurs plus anciens
Là où ce
reportValidity()
n'est pas pris en charge, nous devons tromper un peu le navigateur. Alors, que ferons-nous?form.checkValidity()
. Cela nous dira si le formulaire est valide, mais ne montrera pas l'interface de validation.Dans du code:
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.
la source
Dans une certaine mesure, vous POUVEZ la
trigger
validation du formulaire HTML5 et montrer des conseils à l'utilisateur sans soumettre le formulaire!Deux boutons, un pour valider, un pour soumettre
Définissez un
onclick
écouteur sur le bouton de validation pour définir un indicateur global (par exemplejustValidate
) pour indiquer que ce clic est destiné à vérifier la validation du formulaire.Et définissez un
onclick
écouteur sur le bouton d'envoi pour définir l'justValidate
indicateur sur false.Ensuite, dans le
onsubmit
gestionnaire du formulaire, vous vérifiez l'indicateurjustValidate
pour décider de la valeur de retour et invoquez lepreventDefault()
pour arrêter l'envoi du formulaire. Comme vous le savez, la validation du formulaire HTML5 (et l'indication GUI à l'utilisateur) est préformée avant l'onsubmit
événement, et même si le formulaire est VALIDE, vous pouvez arrêter l'envoi du formulaire en renvoyant false ou invoquerpreventDefault()
.Et, en HTML5 vous avez une méthode pour vérifier la validation du formulaire: le
form.checkValidity()
, alors vous pouvez savoir si le formulaire est validé ou non dans votre code.OK, voici la démo: http://jsbin.com/buvuku/2/edit
la source
Je ne suis pas sûr que cela vaille la peine pour moi de taper tout cela à partir de zéro puisque cet article publié dans A List Apart fait un très bon travail pour l'expliquer. MDN dispose également d'un guide pratique pour les formulaires HTML5 et la validation (couvrant l'API et le CSS associé).
la source
Un peu facile à faire ajouter ou supprimer la validation HTML5 aux ensembles de champs.
la source
Il me semble trouver l'astuce: supprimez simplement l'
target
attribut du formulaire , puis utilisez un bouton d'envoi pour valider le formulaire et afficher des indices, vérifiez si le formulaire est valide via JavaScript, puis publiez ce que vous voulez. Le code suivant fonctionne pour moi:la source
Code HTML:
javascript (en utilisant Jquery):
J'espère que ceci vous aidera
la source
la source
Lorsqu'il existe un processus de validation très complexe (en particulier asynchrone), il existe une solution de contournement simple:
la source
Une autre façon de résoudre ce problème:
la source
Uncaught TypeError: $(...).oninvalid is not a function
et je ne le vois pas dans la documentation jQuery.