Perché il valore di campo errato viene visualizzato nel messaggio di errore quando si utilizza la convalida jQuery (remota)?

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

Domanda

Sto usando il plugin di validazione jQuery in un modo molto simile al 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")
    }
});

La prima volta che viene inviata un'email non valida (ad es. bob@mail.com), il messaggio di errore è come previsto. Tuttavia, se inserisco un'altra e-mail non valida (ad esempio sue@mail.com), il plug-in di convalida visualizza ancora " bob@mail.com è già in uso. & Quot;

Ho rintracciato i parametri che stanno raggiungendo il controller specificato nella chiamata Url.Action e sono sicuramente corretti (ovvero " sue@mail.com" viene inviato come indirizzo email quando quello è ciò che viene inserito nel campo).

Qualcun altro ha riscontrato questo o un problema simile utilizzando il plug-in di convalida jQuery?

È stato utile?

Soluzione

Il campo del nome utente nella demo di Remember the Milk ha esito negativo allo stesso modo (quando si inseriscono i nomi utente 'Peter' e 'George'), quindi probabilmente hai trovato un bug nel plugin.

Altri suggerimenti

Oltre due anni dopo e il bug non sembra essere stato corretto, quindi ecco cosa ho trovato:

Il problema è nella funzione remote :

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...
}

Il problema è che nella seconda e successiva valutazione di questa funzione, il messaggi [element.name] .remote contiene un messaggio di errore specifico (testo) e il effettivo il messaggio originale viene perso per sempre quando previous.originalMessage viene sovrascritto successivamente.

Sono stato in grado di aggirare il problema aggiungendo un segno di spunta prima di quella riga:

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

Non sono sicuro che questa sia davvero la soluzione corretta , ma funziona: gli errori di convalida ora riapplicano la funzione di formattazione su ogni errore di convalida.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top