Ich habe ein Formular mit mehreren Feldern, das ich mit dem hervorragenden jQuery Validation-Plugin von Jörn Zaeffere validiere (einige mit Methoden zur benutzerdefinierten Validierung). Wie umgehen Sie die Validierung mit bestimmten Submit-Steuerelementen (mit anderen Worten, Brandvalidierung mit einigen Submit-Eingaben, aber keine Brandvalidierung mit anderen)? Dies ähnelt ValidationGroups mit Standard-ASP.NET-Validator-Steuerelementen.
Meine Situation:
Es ist mit ASP.NET WebForms, aber Sie können das ignorieren, wenn Sie möchten. Ich verwende die Validierung jedoch eher als "Empfehlung": Mit anderen Worten, wenn das Formular gesendet wird, wird die Validierung ausgelöst, aber anstelle einer "erforderlichen" Meldung wird eine "Empfehlung" angezeigt, die etwas in der Richtung von "Sie" sagt habe die folgenden Felder verpasst ... möchtest du trotzdem fortfahren? " An diesem Punkt im Fehlercontainer ist jetzt eine weitere Schaltfläche zum Senden sichtbar, die gedrückt werden kann, wodurch die Validierung ignoriert und trotzdem gesendet wird. Wie kann man die Formulare .validate () für diese Schaltflächensteuerung umgehen und trotzdem posten?
Das Beispiel "Haus kaufen und verkaufen" unter http://jquery.bassistance.de/validate/demo/multipart/ ermöglicht dies, um auf die vorherigen Links zuzugreifen. Dies geschieht jedoch durch Erstellen benutzerdefinierter Methoden und Hinzufügen zum Validator. Ich würde es vorziehen, keine benutzerdefinierten Methoden erstellen zu müssen, die bereits im Validierungs-Plugin Funktionen duplizieren.
Das Folgende ist eine verkürzte Version des sofort anwendbaren Skripts, das ich gerade habe:
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'
});
Antworten:
Sie können
cancel
einer Senden-Schaltfläche eine CSS-Klasse hinzufügen , um die Validierung zu unterdrückenz.B
Die jQuery Validator-Dokumentation dieser Funktion finden Sie hier: Überspringen der Validierung beim Senden
EDIT :
Die obige Technik wurde veraltet und durch das
formnovalidate
Attribut ersetzt.quelle
$('input[type=submit]').addClass('cancel')
die Klasse muss beim Laden der Seite vorhanden sein.Eine andere (undokumentierte) Möglichkeit, dies zu tun, besteht darin, Folgendes anzurufen:
auf das Klickereignis der Schaltfläche (zum Beispiel).
quelle
$("form").validate().cancelSubmit = true;
. Ich habe versucht$("form").validate().cancelSubmit = false;
,$("form").validate();
beim Senden meinen Senden-Button aufzurufen . Danke$(yourForm).data('validator').cancelSubmit = false;
Danke gemacht werdenNoch ein (dynamischer) Weg:
Und um es wieder zu aktivieren, setzen wir einfach den Standardwert zurück:
Quelle: https://github.com/jzaefferer/jquery-validation/issues/725#issuecomment-17601443
quelle
Fügen Sie der Eingabe das Attribut formnovalidate hinzu
Das Hinzufügen von class = "cancel" ist jetzt veraltet
Informationen zum Überspringen der Validierung beim Senden unter diesem Link finden Sie in den Dokumenten
quelle
Sie können die Option onsubmit: false (siehe Dokumentation ) verwenden, wenn Sie die Validierung verkabeln, die beim Absenden des Formulars nicht validiert wird. Und dann fügen Sie in Ihrer asp: -Button einen OnClientClick = $ ('# aspnetForm') hinzu. Valid (); um explizit zu überprüfen, ob das Formular gültig ist.
Sie können dies als Opt-In-Modell anstelle des oben beschriebenen Opt-Out-Modells bezeichnen.
Beachten Sie, dass ich auch die jquery-Validierung mit ASP.NET WebForms verwende. Es gibt einige Probleme beim Navigieren, aber sobald Sie sie überwunden haben, ist die Benutzererfahrung sehr gut.
quelle
(Erweiterung von
@lepe
's und@redsquare
Antwort fürASP.NET MVC
+jquery.validate.unobtrusive.js
)Mit dem jquery-Validierungs-Plugin (nicht dem unauffälligen von Microsoft) können Sie eine
.cancel
Klasse auf Ihre Senden-Schaltfläche setzen, um die Validierung vollständig zu umgehen (wie in der akzeptierten Antwort gezeigt).(Verwechseln Sie dies nicht mit
type='reset'
etwas völlig anderem)Leider vermasselt der
jquery.validation.unobtrusive.js
Code für die Validierungsbehandlung (ASP.NET MVC) das Standardverhalten des Plugins jquery.validate .Dies ist, was ich mir ausgedacht habe, damit Sie
.cancel
wie oben gezeigt auf die Schaltfläche "Senden" klicken können. Wenn Microsoft dies jemals "behebt", können Sie diesen Code einfach entfernen.Hinweis: Wenn es auf den ersten Blick so aussieht, als ob dies nicht funktioniert, stellen Sie sicher, dass Sie nicht zum Server wechseln und eine vom Server generierte Seite mit Fehlern sehen. Sie müssen die Validierung auf der Serverseite auf andere Weise umgehen. Dadurch kann das Formular nur ohne Fehler clientseitig gesendet werden (die Alternative besteht darin, allen
.ignore
Elementen in Ihrem Formular Attribute hinzuzufügen ).(Hinweis: Möglicherweise müssen Sie
button
der Auswahl hinzufügen , wenn Sie zum Senden Schaltflächen verwenden.)quelle
Pay with PayPal
$(this).closest('form').data("validator", null).unbind().submit();
Dadurch wird der Validator auf null gesetzt und die Bindung aufgehoben. Danach wird das Formular gesendet. Sie können die Validierung durch diese Zeile zurücksetzen:$.validator.unobtrusive.parse($("#YourUniqueFormId"));
.cancel
Klasse. Anmerkung: Wenn Sie eine Art verwenden = ‚Bild‘ Submit - Button dann die.cancel
Klasse wird nicht funktionieren , es sei denn , Sie zu ändern ,":submit"
um":submit,:image"
in dem Plugin - jquery Original ValidierungOder
Aber ohne Erfolg in einem benutzerdefinierten erforderlichen Validator. Um einen Submit dynamisch aufzurufen, habe ich eine gefälschte versteckte Submit-Schaltfläche mit diesem Code erstellt:
Überspringen Sie nun die Validierung korrekt :)
quelle
$("form").validate().settings.ignore = "class-name";
Diese Frage ist alt, aber ich habe einen anderen Weg gefunden, sie zu verwenden
$('#formId')[0].submit()
: Das dom-Element wird anstelle des jQuery-Objekts abgerufen, wodurch alle Validierungs-Hooks umgangen werden. Diese Schaltfläche sendet das übergeordnete Formular, das die Eingabe enthält.Stellen Sie außerdem sicher, dass Sie keinen
input
Namen mit dem Namen "submit" haben oder die benannte Funktion überschreibtsubmit
.quelle
Ich fand, dass der flexibelste Weg darin besteht, JQuery's zu verwenden:
Wenn ich beispielsweise nicht senden möchte, sondern umleiten möchte, kann ich Folgendes tun:
oder ich kann die Daten an einen anderen Endpunkt senden (z. B. wenn ich die Aktion ändern möchte):
Sobald Sie 'event.preventDefault ();' Sie umgehen die Validierung.
quelle
Ich habe zwei Schaltflächen zum Senden von Formularen. Die Schaltfläche zum Speichern und Beenden umgeht die Validierung:
quelle
Hier ist die einfachste Version, hoffe es hilft jemandem,
quelle