3

これが依存する他の入力を検証することによっていくつかの依存関係をチェックする必要があるカスタムルールがあります。私がそのようなことをするとき、他のすべての入力の検証は無視されるようです。

これは私のカスタム検証ルールです:

jQuery.validator.addMethod("checkDependencies", function (value, element) {
  var valid1 = jQuery('form#add-lottery-form').validate().element('#input-1');
  var valid2 = jQuery('form#add-lottery-form').validate().element('#input-2');

  if (valid1 && valid2) {
    return true;
  } else {
    return false;
  }

}, 'dependencie error');

問題を示すためにjsfiddleを作成しました:http:
//jsfiddle.net/AQcrW/

再現する手順:

  1. input4に何かを入力します(この入力はカスタムルール「checkDependencies」を含むものです)[JavaScriptの1行目-パート]
  2. JSの2行目と3行目の呼び出しによるinput1とinput2のエラーが表示されます
  3. input1とinput2に正しい値を挿入します
  4. [送信]をクリックします
  5. !!input3が検証されていないことを認識してください!!

フィドルを再実行します

  1. [送信]をクリックします
  2. すべてのフィールドが期待どおりに検証されます

これは私のせいですか、それともjQuery検証のバグですか?

4

1 に答える 1

1

プラグインコードのデバッグと概要を確認した後、問題の解決策があります。内部の.check(element)関数を呼び出せるようにバリデータープラグインを拡張しました。この関数はtrue/falseを返すだけです。フォームの送信時に2回実行されるため、完全なソリューションではありませんが、少なくともこれまでのところは機能します。追加したコードは次のとおりです。コード

は必要ありません。編集を読んでください。

jQuery.extend(jQuery.validator.prototype, {
    check: function (element)
    {
        return this.check(element);
    }
});


そしてここに作業用のプロトタイプがあります: http://jsfiddle.net/HrPRL/

私の考えに従い、今後のディスカッションをチェックしてください:
https ://github.com/jzaefferer/jquery-validation/issues/579

編集:
私が気付いたように今のところ、私のかなりクールなjQuery拡張機能は効果がありません
。.check()メソッドはプロトタイプオブジェクトの一部であるため、すでにアクセスできます。したがって、上記のコードは必要ありません。

編集2:
これは私が最終的に得たものです。それは機能していますが、いくつかのものを最適化できると思います。
それを行うためのより良いアイデアはありますか?
http://jsfiddle.net/HrPRL/6/
完了しました。私の意図はこれで十分です:http://jsfiddle.net/HrPRL/8/

于 2013-01-09T12:12:19.340 に答える