2009-06-23 13 views
4

Ich habe eine benutzerdefinierte Validierungsmethode hinzugefügt, um ein Passwort zu validieren. Allerdings spielt es keine Rolle, ob die JSON ich erhalte, ist:JQuery-Validator-Plugin mit benutzerdefinierter Methode erweitern

{"success":true} 

oder:

{"success":false} 

Das Feld Passwort nie bestätigt.

$(document).ready(function() { 
    // Ad custom validation 
    $.validator.addMethod('authenticate', function (value) { 
    $.getJSON("./json/authenticate.do",{ password: value},function(json) { 
       return (json.success == true) ? true : false;} 
      ); 
    }, 'Wrong password'); 

    $('form#changePasswordForm').validate({ 
      rules: { 
       repeat_new_password: { equalTo: "#new_password" }, 
       password : {authenticate: true} 
     }, submitHandler: function(form) { 
        $(form).ajaxSubmit({ 
          dataType: "json", 
          success: function(json) { 
          alert("foo"); 
        } 
     });      
    } 
});   
}); 

Irgendeine Idee, was ich falsch mache?

Antwort

7

Was Sie falsch machen, ist, dass wenn Sie Ihre benutzerdefinierte Methode hinzufügen, Sie nie wahr oder falsch daraus zurückgeben. Sie geben es im Ajax-Callback zurück.

$.validator.addMethod('authenticate', function (value) { 
    $.getJSON("./json/authenticate.do",{ password: value }, function(json) { 
     // This return here is useless 
     return (json.success == true) ? true : false; 
    }); 
    // You need to return true or false here... 
    // You could use a synchronous server call instead of asynchronous 
}, 'Wrong password'); 

Statt eine eigene Methode der Zugabe konnte man die remote Funktion:

$('form#changePasswordForm').validate({ 
    rules: { 
     repeat_new_password: { 
      equalTo: "#new_password" 
     }, 
     password : { 
      // This will invoke ./json/authenticate.do?password=THEVALUE_OF_THE_FIELD 
      // and all you need to do is return "true" or "false" from this server script 
      remote: './json/authenticate.do' 
     } 
    }, 
    messages: { 
     password: { 
      remote: jQuery.format("Wrong password") 
     } 
    }, 
    submitHandler: function(form) { 
     $(form).ajaxSubmit({ 
      dataType: "json", 
      success: function(json) { 
       alert("foo"); 
      } 
     });      
    } 
}); 

Sie es in Aktion aus here überprüfen können.

+0

Sie haben 7.000 mehr Rep-Punkte als ich, und weniger Abzeichen. Irgendetwas stimmt eindeutig nicht mit dem Badgesystem. –

+0

Danke, dass Sie mich auf die Remote-Funktion hingewiesen haben. Es ist eine wirklich elegante Lösung. –

+0

Könnten Sie bitte den nächsten Code-Snippet zu Ihrer Remote-Lösung zu veranschaulichen, benutzerdefinierte Nachrichten für Remote hinzufügen: , Meldungen: { \t Passwort: { \t remote: jQuery.format ("Falsches Passwort") } } –

Verwandte Themen