2009-06-23 8 views
4

J'ai ajouté une méthode de validation personnalisée pour valider un mot de passe. Cependant, il n'a pas d'importance si le JSON que je reçois est:Extension du plugin JQuery Validator avec la méthode personnalisée

{"success":true} 

ou:

{"success":false} 

Le champ mot de passe valide jamais.

$(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"); 
        } 
     });      
    } 
});   
}); 

Toute idée, ce que je fais mal?

Répondre

7

Ce que vous faites le mal est que lorsque vous ajoutez votre méthode personnalisée que vous ne revenez vrai ou faux de celui-ci. Vous le retournez dans le rappel ajax.

$.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'); 

Au lieu d'ajouter une méthode personnalisée, vous pouvez utiliser la fonction remote:

$('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"); 
      } 
     });      
    } 
}); 

Vous pouvez le vérifier dans l'action here.

+0

vous avez 7.000 points de plus de points que moi, et moins de badges. Quelque chose ne va pas avec le système de badge. –

+0

Merci de m'avoir indiqué la fonction à distance. C'est une solution vraiment élégante. –

+0

Pourriez-vous s'il vous plaît ajouter le prochain extrait de code à votre solution à distance pour illustrer des messages personnalisés pour distance: , messages: { \t mot de passe: { \t à distance: jQuery.format ("mot de passe incorrect") } } –

Questions connexes