2009-06-23 14 views
4

パスワードを検証するカスタム検証メソッドを追加しました。カスタムメソッドでJQuery Validatorプラグインを拡張する

{"success":true} 

か::

{"success":false} 

検証したことがない場パスワードを私が手にJSONがある場合しかし、それは問題ではありません。

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

私は間違って何をしていますか?

答えて

7

あなたが間違っているのは、カスタムメソッドを追加したときに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'); 

代わりにカスタムメソッドを追加するのは、あなた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"); 
      } 
     });      
    } 
}); 

あなたはアクションhereでそれをチェックアウトすることができます。

+0

あなたは私よりも7000ポイント以上多くのバッジを持っています。バッジシステムに何かが間違っていることが明らかです。 –

+0

私にリモート機能を指摘してくれてありがとう。それは本当にエレガントな解決策です。 –

+0

リモートのためにカスタムメッセージを示すために、あなたのリモートソリューションに次のコードスニペットを追加してもらえ: 、メッセージ:{ \tパスワード:{ \tリモート:jQuery.format(「間違ったパスワード」) } } –

関連する問題