使用自定义方法扩展JQuery Validator插件

我添加了一个自定义validation方法来validation密码。 但是,如果我得到的JSON是:

{"success":true} 

要么:

 {"success":false} 

字段密码永远不会validation。

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

任何想法,我做错了什么?

你做错了是当你添加自定义方法时,你永远不会从中返回true或false。 你在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'); 

您可以使用远程function,而不是添加自定义方法:

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

你可以在这里查看一下 。