Comment faire pour forcer un html5 de validation de formulaire sans le soumettre via jQuery
J'ai cette forme dans mon application et je vais le soumettre via AJAX, mais je veux l'utiliser HTML5 pour la validation côté client. Donc, je veux être en mesure de forcer la validation du formulaire, peut-être via jQuery.
Je veux déclencher la validation sans soumettre le formulaire. Est-il possible?
- Pouvez-vous préciser à quel point aimeriez-vous valider le formulaire? Ce qui déclenche la validation? Voulez-vous valider chaque champ pour les types d'utilisateur, entre et qui sort du champ, les changements de la valeur?
- Je voudrais être possible de faire quelque chose comme ça: $("#my_form").triggerHtml5Validation()
- Cette page peuvent vous aider lien
- Vous pouvez l'obtenir sans jQuery. Voir ma solution.
Vous devez vous connecter pour publier un commentaire.
Pour vérifier si un champ est valide, utilisez:
De vérifier si le formulaire est valide, utilisez:
Si vous souhaitez afficher le natif messages d'erreur que certains navigateurs (comme Chrome), malheureusement, la seule façon de le faire est par la soumission du formulaire, comme ceci:
Espère que cette aide. Gardez à l'esprit que la validation HTML5 n'est pas pris en charge dans tous les navigateurs.
$myForm.submit()
avec$myForm.find(':submit').click()
$('<input type="submit">').hide().appendTo($myForm).click().remove();
checkValidity()
, mais il a aussi une dangereuse erreur.checkValidity()
est ce qui déclenche navigateur natif des messages d'erreur, pas le en cliquant sur le bouton "soumettre". Si vous avez un écouteur d'événement à l'écoute de l'cliquant sur le bouton "soumettre", vous allez déclencher quand vous le faites ` $myForm.find(':submit').cliquez sur la (les)`, ce qui va déclencher lui-même et provoquer une récursion infinie.submit
bouton que vous pouvez utiliser exclusivement pour déclencher la validation des messages. Cela permettrait de lever le dangereux erreur indiqué par @kitkat, ne serait-il pas?submit
bouton est caché. C'est d'avoir unsubmit
écouteur d'événement qui le rend dangereux, si lesubmit
bouton est visible ou non. En tout cas, en cliquant sur "soumettre" n'est pas ce qui déclenche la validation, donc c'est un point discutable.click()
etsubmit()
. Je vous aime tant!if (!$myForm[0].checkValidity()) { // If the form is invalid, submit it. The form won't actually submit; // this will just cause the browser to display the native HTML5 error messages. $submit_btn.click(submitBtnCheck) } function submitBtnCheck(e){ if ($myForm[0].checkValidity()) { e.preventDefault(); formSubmitCallback(); } }
J'ai trouvé que cette solution fonctionne pour moi.
Suffit d'appeler une fonction javascript comme ceci:
action="javascript:myFunction();"
Ensuite, vous avez la validation html5... vraiment simple 🙂
action="javascript:0"
sur le<form>
et liéclick
de l'événement sur la<button>
àMyFunction()
et tout a très bien fonctionné. Je garde tous les JS de HTML.MyFunction
pourrez alors testerform.checkValidity()
pour continuer.onsubmit()
est presque toujours mieux que la liaison à un boutononclick()
, car il existe d'autres moyens de soumettre un formulaire. (Notamment par la frappe de lareturn
clé.)Ici est une façon plus générale qui est un peu plus propre:
Créer votre formulaire comme ceci (peut-être une forme mannequin qui ne fait rien):
Lier toutes les formes que vous n'avez pas vraiment envie de soumettre:
Maintenant, disons que vous avez un
<a>
(dans le<form>
) que sur cliquez vous souhaitez valider le formulaire:Quelques notes ici:
checkValidity()
est suffisante (au moins dans chrome). Si d'autres pourraient s'ajouter des commentaires à tester cette théorie sur les autres navigateurs je vais mettre à jour cette réponse.<form>
. C'était juste un endroit propre et flexible pour une solution..à partir de: validation de formulaire html5
reportValidity
est uniquement pris en charge par Chrome 40.0Peut être en retard à la fête, mais pourtant, quelque part, je trouve cette question, tout en essayant de résoudre le même problème. Comme pas de code à partir de cette page a fonctionné pour moi, en attendant j'ai trouvé une solution qui fonctionne comme spécifié.
Problème, c'est quand votre
<form>
DOM contiennent des<button>
élément, une fois tiré, que<button>
va automatiquement remplir de formulaire. Si vous jouez avec de l'AJAX, Vous avez probablement besoin de prévenir l'action par défaut. Mais il y a un hic: Si vous venez de le faire, Vous permettra également d'éviter de base de la validation HTML5. Par conséquent, il est bon d'appeler pour prévenir les valeurs par défaut sur ce bouton uniquement si le formulaire est valide. Sinon, la validation HTML5 va Vous protéger de la soumission. jQuerycheckValidity()
aidera avec cela:jQuery:
Code décrit ci-dessus Vous permettra d'utiliser de base de la validation HTML5 (avec le type et le pattern matching) SANS soumettre le formulaire.
Vous parler de deux choses différentes "la validation HTML5" et de validation de formulaire HTML à l'aide de javascript/jquery.
HTML5 "a" options intégrées pour la validation d'un formulaire. Comme l'utilisation de "nécessaire" attribut sur un domaine, qui pourrait (basé sur le navigateur de mise en œuvre) échec de la soumission d'un formulaire sans l'aide de javascript/jquery.
Avec javascrip/jquery vous pouvez faire quelque chose comme ceci
triggerHtml5Validation()
fonction. Le code ci-dessus va s'attacher événement d'envoi de votre formulaire; sur soumettre, vous intercepter l'événement et de valider le formulaire. Si vous ne veux plus jamais de soumettre le formulaire, il suffit dereturn false;
et la soumission ne se produiront jamais.return (valid) ? true : false
===return valid
. 🙂return valid
ne retourne pas false null/valeurs indéfinies. Mais il n'a pas vraiment d'importance, la réponse a été de pseudo-code, de toute façon, le point est: utiliser return false pour ne pas soumettre le formulaire ^^Vous n'avez pas besoin de jQuery pour atteindre cet objectif. Dans votre formulaire d'ajouter:
ou en JavaScript:
Dans votre
buttonSubmit
fonction (ou whatver vous l'appelez), vous pouvez soumettre le formulaire en utilisant AJAX.buttonSubmit
ne me demande si votre formulaire est validé en HTML5.Dans le cas où cette aide à quelqu'un, voici mon
buttonSubmit
fonction:Certains de mes formulaires contiennent plusieurs boutons de soumission, d'où cette ligne
if (submitvalue == e.elements[i].value)
. J'ai défini la valeur desubmitvalue
à l'aide d'un événement de clic.De vérifier tous les champs obligatoires du formulaire sans utiliser le bouton soumettre, vous pouvez utiliser en dessous de la fonction.
Vous devez attribuer nécessaire attribut pour les contrôles.
J'ai eu une situation assez complexe, où j'ai besoin de plusieurs boutons de soumission pour traiter des choses différentes. Par exemple, Enregistrer et Supprimer.
La base, il était aussi discret, donc je ne pouvais pas juste faire un bouton normal. Mais il voulait aussi utiliser la validation html5.
Ainsi l'événement submit a été remplacée dans les cas où l'utilisateur a appuyé sur la touche entrée pour déclencher l'prévue par défaut de soumission; dans cet exemple enregistrer.
Ici, ce sont les efforts de la transformation de la forme à continuer à travailler avec/sans javascript et html5 de validation, avec à la fois présenter et cliquez sur événements.
xHTML
JavaScript
La mise en garde à l'aide de Javascript, c'est que le navigateur par défaut de onclick doit se propager jusqu'à la soumission de l'événement DOIT se produire afin d'afficher les messages d'erreur sans l'appui de chaque navigateur dans votre code.
Sinon, si l'événement click est remplacée par de l'événement.preventDefault() ou return false il ne sera jamais à se propager vers le navigateur de l'événement submit.
La chose à souligner est que, dans certains navigateurs ne se déclenche pas à la soumettre le formulaire lorsque l'utilisateur appuie sur entrée, à la place il va déclencher le premier bouton de soumission du formulaire. Il y a donc une console.log ("formulaire de soumission") pour montrer qu'il ne déclenche pas.
jQuery
explicitement. Il en diffère en ce qu'il gère le traitement de la validation HTML5 avec plusieurs boutons de soumission et empêche l'AJAX formulaire de soumission lorsque l'invalide. Par défautsave
action lorsque l'utilisateur appuie sur laenter
touche sur le clavier. Qui, à l'époque de mon affectation aucune des réponses a été une solution pour plusieurs boutons de soumission ou de la capture de la touche entrée pour empêcher l'ajax présentation.Vous pouvez le faire sans la soumission du formulaire.
Par exemple, si le formulaire de soumission bouton avec l'id "recherche" est dans l'autre forme . Vous pouvez appeler l'événement click sur le bouton soumettre et call ev.preventDefault après.
Pour mon cas, j'ai valider le formulaire B de la Forme d'Une présentation.
Comme ce
Je sais que cela a déjà été répondu, mais j'ai une autre solution possible.
Si à l'aide de jquery, vous pouvez le faire.
D'abord créer un couple d'extensions jquery de sorte que vous pouvez resuse lorsque c'est nécessaire.
Prochaine faire quelque chose comme ça où vous voulez l'utiliser.
Travaillé cette forme me afficher le natif HTML 5 messages d'erreur à la validation d'un formulaire.
Remarque: RegForm est le
form id
.Référence
Espoir aide à quelqu'un.
C'est une question assez simple d'avoir HTML5 effectuer la validation de toute forme, tout en ayant modernes JS contrôle sur la forme. Le seul inconvénient est le bouton de soumission doit être à l'intérieur de la
<form>
.html
js
De cette façon fonctionne bien pour moi:
Ajouter
onSubmit
attribut dans votreform
, n'oubliez pas d'inclurereturn
de la valeur.Définir la fonction.
ci-dessous fonctionne pour moi,
pas une meilleure réponse, mais fonctionne pour moi.
Je pense que la meilleure approche
sera à l'aide de jQuery de Validation plugin qui utilise les meilleures pratiques pour la validation d'un formulaire, et il a également une bonne prise en charge du navigateur. Si vous n'avez pas besoin de vous soucier des problèmes de compatibilité navigateur.
Et nous pouvons utiliser jQuery validation valide() fonction qui vérifie si le formulaire est valide ou si tous les éléments sélectionnés sont valables sans la soumission du formulaire.
Selon la question html5 validité doit être en mesure de valider à l'aide de jQuery au début et à la plupart de la réponse ce n'est pas le cas et la raison pour cela est la suivante:
lors de la validation à l'aide de html5 forme par défaut de la fonction
nous avons besoin de comprendre que jQuery retourne un tableau d'objets, alors que la sélection comme ceci
par conséquent, vous devez spécifier le premier index de faire checkValidity() de la fonction de travail
voici la solution complète: