Ich arbeite mit ASP.Net MVC3
, der einfachere Weg, die Client-Validierung zu verwenden, wäre die Aktivierung der jquery.validate.unobtrusive
. Alles funktioniert gut, für Dinge, die direkt vom Server stammen.
Aber wenn ich versuche, einige neue 'Eingaben' mit Javascript zu versehen, wusste ich, dass ich aufrufen muss $.validator.unobtrusive.parse()
, um die Validierungen erneut zu binden. Trotzdem funktionieren all diese dynamisch injizierten Felder nicht.
Schlimmer noch, ich versuche manuell mit zu binden jquery.validate
und es funktioniert auch nicht. Irgendwelche Gedanken?
Antworten:
Ich habe eine Erweiterung für die Bibliothek jquery.validate.unobtrusive erstellt, die dieses Problem für meine Situation gelöst hat - es könnte von Interesse sein.
http://xhalent.wordpress.com/2011/01/24/applying-unobtrusive-validation-to-dynamic-content/
quelle
$.validator.unobtrusive.parse()
. Außerdem scheint es nur neue Regeln hinzuzufügen, aber keine Aktualisierungen bestehender Regeln aufzunehmen?Ich habe Xhalents Ansatz ausprobiert, aber leider hat es bei mir nicht funktioniert. Robins Ansatz hat funktioniert und nicht funktioniert. Es funktionierte hervorragend für dynamisch hinzugefügte Elemente. Wenn Sie jedoch versuchen, mit JQuery alle Validierungsattribute und -bereiche aus dem DOM zu entfernen, versucht die Validierungsbibliothek weiterhin, sie zu validieren.
Wenn Sie jedoch zusätzlich zu "validationData" die "unauffälligen Validierungs" -Daten des Formulars entfernen, funktioniert dies wie ein Zauber zum dynamischen Hinzufügen und Entfernen von Elementen, die validiert oder nicht validiert werden sollen.
quelle
validator
ist nicht definiert? Ich habe sowohl Validierung als auch Validierung. Unauffällig referenziert. Die Validierung funktioniert, bis ich diesen Code$('#form').validate({ignore: ""})
Ich mag die Einfachheit der @ viggity- und @ Robins-Lösung wirklich sehr, deshalb habe ich daraus ein schnelles kleines Plugin gemacht:
Anwendungsbeispiel:
quelle
Ich habe das gleiche Problem. Ich habe festgestellt, dass es nicht möglich ist, $ .validator.unobtrusive.parse () zweimal im selben Formular aufzurufen. Beim erstmaligen Laden des Formulars vom Server wird das Formular automatisch von der unauffälligen Bibliothek analysiert. Wenn Sie dem Formular dynamisch ein Eingabeelement hinzufügen und $ .validator.unobtrusive.parse () erneut aufrufen, funktioniert dies nicht. Gleiches gilt für parseElement ().
Die unauffällige lib ruft die validate-Methode des jquery validate-Plugins auf, um alle Regeln und Nachrichten festzulegen. Das Problem ist, dass das Plugin beim erneuten Aufruf die angegebenen neuen Regeln nicht aktualisiert.
Ich habe eine grobe Lösung gefunden: Bevor ich die Analysemethode für die unauffällige Bibliothek aufrufe, werfe ich den Formularvalidator weg:
Wenn nun die Validierungsmethode von der unauffälligen Bibliothek aufgerufen wird, werden alle Regeln und Nachrichten einschließlich der dynamisch hinzugefügten Eingaben neu erstellt.
Hoffe das hilft
quelle
Ich verwende MVC 4 und JQuery 1.8. Es sieht so aus, als ob der folgende Code benötigt wird, damit Jquery dynamisch injizierten Inhalt über Ajax oder Jquery in das DOM validieren kann.
Ich habe eine modulare Funktion erstellt, die das Jquery-Objekt des neu hinzugefügten Elements akzeptiert. Wenn Sie
tblContacts
mit Jquery auf Knopfdruck eine neue Tabelle mit der ID geklont haben , fügen Sie die folgende Funktion in Ihre js-Datei einund nenne es so:
quelle
Verwenden Sie die Regelfunktion direkt aus dem jquery-Validierungsdokument. So was:
quelle
Ausgehend von Xhalents Lösung, die oben als Antwort markiert wurde, habe ich sie etwas erweitert.
Im Grunde funktioniert es immer noch genauso wie die obige Xhalent-Lösung, aber ich habe die Möglichkeit hinzugefügt, Regeln für Elemente zu entfernen, die Sie aus dem Dom entfernen. Wenn Sie also Elemente aus dem Dom entfernen und möchten, dass diese Validierungsregeln ebenfalls entfernt werden, rufen Sie Folgendes auf:
quelle
Ich habe das Codeskript von @ Xhalent in meinem Code gefunden und wollte es löschen, weil ich es nicht verwendet habe, was mich zu dieser SO-Frage führte.
Dieser Code ist ziemlich sauber und einfach:
Um diese jQuery-Erweiterung aufzurufen, verwenden Sie einfach einen Selektor, um Ihr Formular abzurufen:
Viola!
quelle
Ich versuchte es mit der Antwort von Viggity und zuerst schien alles zu funktionieren. Aber nach einer Weile bemerkte ich, dass die Validierung umso schmerzhafter wird, je dynamischer die Elemente sind, die ich hinzugefügt habe. Der Grund war, dass seine Lösung die Ereignishandler nicht auflöst, sondern jedes Mal neue hinzufügt. Wenn Sie also 5 Elemente hinzufügen, wird die Validierung 6-mal statt nur einmal ausgeführt. Um dies zu beheben, müssen Sie die Ereignisse zusätzlich zu den removeData-Aufrufen aufheben.
quelle
Bei dynamischen Inhalten müssen Sie die unauffälligen Überprüfungen wie
Form
folgt aktualisieren und beim Senden überprüfen, ob sie gültig sind.quelle
Ich habe eine Weile damit herumgespielt, Lösungen verschrottet und es später erneut versucht (wenn ich etwas Freizeit hatte, ob Sie es glauben oder nicht).
Ich bin nicht sicher, ob sich dieses Verhalten in neueren Versionen von jquery (wir verwenden 1.7.2) geändert hätte, seit dieser Thread zuletzt erstellt oder kommentiert wurde, aber ich fand, dass dies gut
.parseElement(inputElement)
funktioniert, wenn ich versuche, einem Formular dynamisch erstellte Elemente hinzuzufügen das hat schon einen validator geladen. Dies wurde bereits von @jamesfm (15. Februar 11) in einem der obigen Kommentare vorgeschlagen, aber ich habe es die ersten Male übersehen, als ich daran arbeitete. Deshalb füge ich es als separate Antwort hinzu, um es offensichtlicher zu machen, und weil ich denke, dass es eine gute Lösung ist und nicht so viel Aufwand erfordert. Es ist möglicherweise nicht für alle in den nachfolgenden Antworten aufgeworfenen Fragen relevant, aber ich denke, es wäre eine Lösung für die ursprüngliche Frage. So habe ich meine zum Laufen gebracht:quelle
Erstens denke ich, der Aufruf sollte an .validator erfolgen, nicht an validieren, dann müssen Sie die ID des Formulars übergeben
quelle
Wenn Sie Dinge hinzufügen und entfernen müssen, bei denen möglicherweise bereits einige Fehler angezeigt werden, habe ich Folgendes mitgebracht. Es basiert hauptsächlich auf verschiedenen Ideen auf dieser Fragenseite. Ich verwende das integrierte
destroy()
Attribut, anstatt nur das Datenattribut für die JQuery-Validierung zu entfernen.Sie rufen es auf, bevor Sie die Eingaben im Formular dynamisch ändern. Anschließend initialisieren Sie die Validierung erneut.
Hinweis: Wenn einige oder alle Eingaben validiert wurden und Fehler aufweisen, werden diese Fehler zurückgesetzt ... aber sie werden bei der nächsten Validierung korrekt wiedergegeben.
quelle