ich eine Form haben, die zusammen mit einer Validierung Zusammenfassung unaufdringlich JQuery Validierung verwendet. Es funktioniert großartig. Dieses Formular führt jedoch einen Ajax-POST aus, der ein JSON-Ergebnis zurückgibt. Wenn das Ergebnis == wahr ist, fahre ich fort. Wenn das JSON-Ergebnis jedoch ein Array von Nachrichten zurückgibt, möchte ich die Formularvalidierung auslösen, um die Felder zu aktualisieren. Fehler zurückgegeben werden, wie folgt:Without a Key
{
"errors": [
{ "key" : "NameFirst", "message": "This is the message" },
{ "key" : "NameLast", "message": "This is the message" }
]
}
ich das JSON Ergebnis analysieren und rufen errors() wie folgt:
for (var j = 0; j < response.errors.length; j++) {
var key = response.errors[j].key;
var error = {};
error[key] = response.errors[j].message;
$form.data('validator').showErrors(error);
}
Dies korrekt die Felder markiert sind, aber nicht die Validierung Zusammenfassung aktualisieren. Wie kann ich das aktualisieren?
Auch, manchmal sind die Fehler generisch und ordne nicht auf eine bestimmte Eigenschaft/Feld im Modell. In diesem Fall werden sie mit null Schlüssel zurückgegeben wie:
{
"errors": [
{ "key" : null, "message": "This is the message" },
{ "key" : null, "message": "This is the other message" },
{ "key" : "NameFirst", "message": "This is the message" },
{ "key" : "NameLast", "message": "This is the message" }
]
}
ich errors auf diejenigen, die nicht anrufen können, weil sie nicht auf eine Feldkennung zuzuordnen. Sobald ich gesagt, wie die Zusammenfassung zu aktualisieren, ich sicher kann ich Elemente in die Liste für die generischen Nachrichten anhängen, aber ich bin für andere Vorschläge offen. Vielen Dank!
UPDATE
Hier ist, was ich tun, endete das ganz gut zu funktionieren scheint. Ich habe die Zusammenfassung von Hand zusätzlich zu fordern errors auf den gültigen Schlüssel Fehler bauen:
var $summary = $form.find("[data-valmsg-summary=true]")
.addClass("validation-summary-errors")
.removeClass("validation-summary-valid");
var $ul = $summary.find("ul").empty();
var error = {};
$.each(response.errors, function() {
if (this.key)
error[this.key] = this.message;
$("<li />").html(this.message).appendTo($ul);
});
$form.validate().showErrors(error);
Ich hoffe, das anderen hilft.
Das ist fast genau das, was ich getan habe. ShowErrors() löst jedoch eine Ausnahme aus, wenn ein Schlüssel nicht einem Feldnamen zugeordnet ist. Es scheint ein Null-Element zu passieren, das am Ende versucht, highlight() aufzurufen, was zu einem Fehler führt, dass die Eigenschaft "Eigenschaft nicht lesen" nicht erkannt werden kann. Daher kann ich Ihren keyLess Incrementor nicht verwenden. Ich werde meinen Beitrag mit etwas Ähnlichem aktualisieren. Ich füge grundsätzlich alle Fehler zum UL hinzu, aber füge dem Fehlerobjekt nur gültige Schlüsselfehler hinzu. –