Warum ist der falsche Wert Feld in der Fehlermeldung angezeigt, wenn jQuery (remote) Validierung?

StackOverflow https://stackoverflow.com/questions/1626998

Frage

Ich verwende das jQuery Validierung Plugin in einer sehr ähnlichen Weise wie die Remember The Milk Demo .

$("#registrationForm").validate({
  rules: {      
    email: {
      required: true,
      email: true,
      remote: '<%=Url.Action(...) %>'
    },        
  },
  messages: {
    email: {
      required: "Please enter an email address",
      email: "Please enter a valid email address",
      remote: jQuery.format("{0} is already in use")
    }
});

Das erste Mal, wenn eine ungültige E-Mail (z bob@mail.com) eingereicht wird, wird die Fehlermeldung wie erwartet. Allerdings, wenn ich dann eine andere ungültige E-Mail eingeben (zum Beispiel sue@mail.com), die Validierung Plugin zeigt weiterhin „bob@mail.com ist bereits im Einsatz.“

Ich habe die Parameter zurückgeführt, die den Controller in Url.Action Aufruf angegeben erreichen und sie sind auf jeden Fall richtig (dh „sue@mail.com“ als E-Mail-Adresse gesendet wird, wenn das ist, was in dem Feld eingegeben wird).

Hat jemand sonst laufen in dieses oder ein ähnliches Problem mit dem jQuery Validierung Plugin?

War es hilfreich?

Lösung

Der Benutzername Feld auf dem die Milch Demo Denken Sie daran, nicht in der gleichen Art und Weise (wenn Benutzernamen ‚Peter‘ und ‚George‘ eingeben), so haben Sie wahrscheinlich einen Fehler im Plugin gefunden.

Andere Tipps

Mehr als zwei Jahre später, und der Fehler scheint noch nicht festgelegt werden, so ist hier, was ich gefunden habe:

Das Problem ist in der remote Funktion:

remote: function(value, element, param) {
    if ( this.optional(element) )
        return "dependency-mismatch";

    var previous = this.previousValue(element);
    if (!this.settings.messages[element.name] )
        this.settings.messages[element.name] = {};
    previous.originalMessage = this.settings.messages[element.name].remote;
    this.settings.messages[element.name].remote = previous.message;

    // snip more code...
}

Das Problem ist, dass am 2. und späteren Auswertungen dieser Funktion enthält die messages[element.name].remote eine bestimmten (Text) Fehlermeldung, und die ist ursprüngliche Nachricht wird für immer verloren, wenn previous.originalMessage danach überschreibt.

Ich konnte vor dieser Linie durch das Hinzufügen einer Überprüfung, um das Problem zu umgehen:

if (!previous.originalMessage)
    previous.originalMessage = this.settings.messages[element.name].remote;

Ich bin mir nicht sicher, ob das wirklich das ist richtig Lösung, aber es funktioniert - jetzt Prüffehlern die Formatierungsfunktion auf jedem Prüfungsfehler erneut anwenden

.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top