Wie fügt man eine "submitHandler" -Funktion hinzu, wenn jQuery Unobtrusive Validation verwendet wird?
Bin ich validiere ein Formular mit der neuen unobtrusive validation-Funktionen in ASP.NET MVC-3.
Es gibt also keinen code, der ich geschrieben habe das setup jQuery Validierung zu starten " meine form. Dies alles ist durch das laden der jQuery.validate.unobtrusive.js Bibliothek.
Leider muss ich whack in einem " sind Sie sicher?' message-box, wenn das Formular gültig ist, aber vor dem Absenden. Mit jQuery validieren möchten, fügen Sie die option handleSubmit bei der Initialisierung etwa so:
$("#my_form").validate({
rules: {
field1: "required",
field1: {email: true },
field2: "required"
},
submitHandler: function(form) {
if(confirm('Are you sure?')) {
form.submit();
}
}
});
Aber Sie brauchen nicht zu initialisieren, wenn die Verwendung der unaufdringlichen Bibliothek.
Irgendwelche Ideen, wo/wie ich hinzufügen kann, eines submit-handler in diesem Fall?
Thx
InformationsquelleAutor der Frage WooWaaBob | 2011-01-20
Du musst angemeldet sein, um einen Kommentar abzugeben.
Unauffälligen Bibliothek wird befestigen Sie den validator auf alle Formen, so haben Sie zu ersetzen, die submitHandler diese Weise:
InformationsquelleAutor der Antwort petrhaus
Fand ich diese Frage, bei der Suche nach einem Weg, um die
invalidHandler
im Gegensatz zu densubmitHandler
. Interessant ist, Sie können nicht voninvalidHandler
in der gleichen Weise bei der Verwendung von unobtrusive validation.Wird die Funktion nicht ausgelöst, wenn eine ungültige form erkannt wird:
Dieser Ansatz funktioniert:
Scheint es auf Grund der Art und Weise, die jquery.validate.unobtrusive.js Skript initialisiert die Überprüfen plugin, und die Art und Weise, dass das plugin ruft den handler.
InformationsquelleAutor der Antwort DGreen
Folgende Erkenntnisse von Interesse sein können, um den Unterschied zu verstehen zwischen :
submitHandler : wird Aufgerufen, wenn das Formular erfolgreich geprüft wurde, kurz bevor die server postback
invalidHandler : wird Aufgerufen, wenn die Validierung fehl und es wird keine post zurück
@DGreen die Lösung definitiv zu sein scheint, der beste Weg, um zu injizieren, Besondere Handhabung, wenn die Formular-Validierung schlägt fehl, und Sie müssen etwas tun, wie die Anzeige eines pop-up-Validierung Zusammenfassung (invalidHandler)
@PeteHaus Lösung ist der beste Weg, etwas zu tun, wenn Sie verhindern möchten, dass ein postback einer erfolgreich validierten form (submitHandler)
Allerdings war ich etwas besorgt über das, was Verhalten war ich überschreiben (oder nicht zu überschreiben), das durch Bindung an die
.validate
Methode wie diese - und warum ich hatte zu tun, jeder Weg anders. So ich habe in der Quelle. Ich empfehle jeder der will, zu verstehen, dieses Verfahren nicht mehr so zu - setzen in einigen der "alert" - Aussagen oder "debugger" Aussagen, und es ist ziemlich einfach zu Folgen entlang*Sowieso, es stellt sich heraus, dass, wenn die
jquery.validate.unobtrusive
handler initialisiertjquery.validate
plugin es so nicht in denparseElement()
Methode durch die Abfrage von Optionen, erstellt von dervalidationInfo()
Methode.ValidationInfo()
gibt die Optionen:Den
onErrors()
Methode injquery.validate.unobtrusive
ist verantwortlich für die dynamische Erstellung der Validierung Zusammenfassung für MVC. Wenn Sie nicht erstellen eine Validierung Zusammenfassung (mit@Html.ValidationSummary()
muss übrigens innerhalb der FORM, Körper), dann ist diese Methode völlig inert und tut nichts, so brauchen Sie nicht zu kümmern.Wenn Sie wirklich wollen, können Sie die Bindung der
jquery.validate.unobtrusive
handler wie dieser - aber ich würde nicht die Mühe, michWenn Sie sich Fragen, warum dies funktioniert,
und das funktioniert nicht,
weil
submitHandler
ist explicily aufgerufen, injquery.validate
wenn die Gültigkeitsprüfung durchgeführt wird. Damit ist es egal, an welchem Punkt es eingestellt ist.aber die
invalidHandler
ist an ein Ereignis gebunden, währendinit()
so, wenn Sie legen Sie es in Ihrem eigenen code es ist zu spätEin wenig den code schrittweise macht für eine viel Verständnis manchmal! Hoffe, das hilft
*Stellen Sie sicher, dass Sie nicht minifizierung in bundles aktiviert.
InformationsquelleAutor der Antwort Simon_Weaver
Ich lieber injizieren einen event-handler, so dass es gebunden werden kann... 🙂
Ich habe auf diese Weise binden können, um es überall benötigt...
InformationsquelleAutor der Antwort Tracker1
I basiert diese auf der original-Antwort, die für mich nicht funktioniert. Ich denke, die Dinge haben sich geändert in jQuery.
Als üblich, nehmen Sie diesen code und fügen Sie reichlich Fehler überprüfen 😀 ich benutze ähnlichen code, um zu verhindern, dass Doppel-sendet auf unsere Formen, und es funktioniert in IE8+ (mvc4 und jquery 1.8.x).
InformationsquelleAutor der Antwort Andrew Backer