J'ai un formulaire avec plusieurs champs que je valide (certains avec des méthodes ajoutées pour la validation personnalisée) avec l'excellent plugin jQuery Validation de Jörn Zaeffere. Comment contourner la validation avec des contrôles de soumission spécifiés (en d'autres termes, la validation au feu avec certaines entrées de soumission, mais ne déclenche pas la validation avec d'autres)? Cela serait similaire à ValidationGroups avec des contrôles de validation ASP.NET standard.
Ma situation:
C'est avec ASP.NET WebForms, mais vous pouvez l'ignorer si vous le souhaitez. Cependant, j'utilise davantage la validation comme une "recommandation": en d'autres termes, lorsque le formulaire est soumis, la validation se déclenche mais au lieu d'un message "obligatoire" qui s'affiche, une "recommandation" montre qui dit quelque chose du genre "vous vous avez manqué les champs suivants .... voulez-vous quand même continuer? " À ce stade, dans le conteneur d'erreurs, il y a un autre bouton de soumission maintenant visible qui peut être pressé qui ignorerait la validation et soumettrait de toute façon. Comment contourner les formulaires .validate () pour ce bouton de contrôle et toujours publier?
L'échantillon Acheter et vendre une maison sur http://jquery.bassistance.de/validate/demo/multipart/ permet cela afin d'accéder aux liens précédents, mais il le fait en créant des méthodes personnalisées et en l'ajoutant au validateur. Je préférerais ne pas avoir à créer des méthodes personnalisées de duplication de fonctionnalités déjà dans le plugin de validation.
Ce qui suit est une version abrégée du script immédiatement applicable que j'ai en ce moment:
var container = $("#<%= Form.ClientID %> div.validationSuggestion");
$('#<%= Form.ClientID %>').validate({
errorContainer: container,
errorLabelContainer: $("ul",container),
rules: {
<%= YesNo.UniqueID %>: { required: true },
<%= ShortText.UniqueID %>: { required: true } // etc.
},
messages: {
<%= YesNo.UniqueID %>: 'A message.',
<%= ShortText.UniqueID %>: 'Another message.' // etc.
},
highlight: function(element, errorClass) {
$(element).addClass(errorClass);
$(element.form).find("label[for=" + element.id + "]").addClass(errorClass);
$(element.form).find("label[for=" + element.id + "]").removeClass("valid");
},
unhighlight: function(element, errorClass) {
$(element).removeClass(errorClass);
$(element.form).find("label[for=" + element.id + "]").removeClass(errorClass);
$(element.form).find("label[for=" + element.id + "]").addClass("valid");
},
wrapper: 'li'
});
Réponses:
Vous pouvez ajouter une classe CSS
cancel
à un bouton d'envoi pour supprimer la validationpar exemple
Voir la documentation jQuery Validator de cette fonctionnalité ici: Ignorer la validation lors de la soumission
MODIFIER :
La technique ci-dessus a été déconseillée et remplacée par l'
formnovalidate
attribut.la source
$('input[type=submit]').addClass('cancel')
-à- dire que la classe doit être présente lors du chargement de la page.Une autre façon (non documentée) de le faire est d'appeler:
sur l'événement click du bouton (par exemple).
la source
$("form").validate().cancelSubmit = true;
. J'ai essayé$("form").validate().cancelSubmit = false;
et j'ai appelé$("form").validate();
à soumettre mon bouton de soumission. Merci$(yourForm).data('validator').cancelSubmit = false;
MerciEncore une autre manière (dynamique):
Et pour le réactiver, nous avons simplement réinitialisé la valeur par défaut:
Source: https://github.com/jzaefferer/jquery-validation/issues/725#issuecomment-17601443
la source
Ajouter l'attribut formnovalidate à l'entrée
L'ajout de class = "cancel" est désormais obsolète
Consultez la documentation pour ignorer la validation lors de la soumission sur ce lien
la source
Vous pouvez utiliser l' option onsubmit: false (voir documentation ) lors du câblage de la validation qui ne validera pas à la soumission du formulaire. Et puis dans votre asp: bouton ajoutez un OnClientClick = $ ('# aspnetForm'). Valid (); pour vérifier explicitement si le formulaire est valide.
Vous pouvez appeler cela le modèle opt-in, au lieu de l'opt-out décrit ci-dessus.
Remarque, j'utilise également la validation jquery avec ASP.NET WebForms. Il y a quelques problèmes à parcourir, mais une fois que vous les avez surmontés, l'expérience utilisateur est très bonne.
la source
(Extension de
@lepe
's et@redsquare
réponse pourASP.NET MVC
+jquery.validate.unobtrusive.js
)Le plugin de validation jquery (pas celui discret de Microsoft) vous permet de mettre une
.cancel
classe sur votre bouton d'envoi pour contourner complètement la validation (comme indiqué dans la réponse acceptée).(ne confondez pas cela avec ce
type='reset'
qui est complètement différent)Malheureusement, le
jquery.validation.unobtrusive.js
code de gestion de la validation (ASP.NET MVC) bousille en quelque sorte le comportement par défaut du plugin jquery.validate .C'est ce que j'ai proposé pour vous permettre de mettre
.cancel
sur le bouton de soumission comme indiqué ci-dessus. Si Microsoft "corrige" cela, vous pouvez simplement supprimer ce code.Remarque: si au premier essai, il semble que cela ne fonctionne pas, assurez-vous de ne pas aller-retour vers le serveur et de voir une page générée par le serveur avec des erreurs. Vous devrez contourner la validation côté serveur par d'autres moyens - cela permet simplement au formulaire d'être soumis côté client sans erreur (l'alternative serait d'ajouter des
.ignore
attributs à tout dans votre formulaire).(Remarque: vous devrez peut-être ajouter
button
au sélecteur si vous utilisez des boutons pour soumettre)la source
Pay with PayPal
bouton d'$(this).closest('form').data("validator", null).unbind().submit();
Cela définira le validateur sur null et le dissociera. Après cela, il soumettra le formulaire. Vous pouvez réinitialiser la validation par cette ligne:$.validator.unobtrusive.parse($("#YourUniqueFormId"));
.cancel
classe. Note: si vous utilisez un type = « image » bouton d' envoi alors la.cancel
classe ne fonctionnera pas à moins que vous changez":submit"
de":submit,:image"
dans le plugin de validation jquery originaleOu
Mais sans succès dans un validateur personnalisé requis. Pour appeler une soumission de manière dynamique, j'ai créé un faux bouton de soumission caché avec ce code:
Maintenant, sautez la validation correctement :)
la source
$("form").validate().settings.ignore = "class-name";
Cette question est ancienne, mais j'ai trouvé un autre moyen de la contourner
$('#formId')[0].submit()
, qui récupère l'élément dom au lieu de l'objet jQuery, contournant ainsi tous les hooks de validation. Ce bouton soumet le formulaire parent qui contient l'entrée.Assurez-vous également que vous n'en avez pas
input
nommé "submit", sinon il remplace la fonction nomméesubmit
.la source
J'ai trouvé que le moyen le plus flexible est d'utiliser JQuery:
Par exemple, si au lieu de soumettre, je souhaite rediriger, je peux faire:
ou je peux envoyer les données à un autre point de terminaison (par exemple, si je veux changer l'action):
Une fois que vous avez fait 'event.preventDefault ();' vous contournez la validation.
la source
J'ai deux boutons pour la soumission du formulaire, le bouton nommé enregistrer et quitter contourne la validation:
la source
Voici la version la plus simple, j'espère que cela aide quelqu'un,
la source
travaille aussi
la source