1

作業中のコードは次のとおりです。

$('#button').click( function (e) {
  var rules = rules_data; //object that holds all rules for form validation

  if (a == b) { //some random criteria 
    delete object.rule5; //deletes specific rule (in this case 'rule5') out of object if criteria is met, otherwise the rules object is unchanged  
  }

  var validate_form = $('#form').validate(rules);

  if (validate_form === false) {
    e.preventDefault();
  }
});

このコードに関する私の問題-ルールオブジェクトがボタンのクリックごとに想定されるように変更されても(基準が満たされている場合)、検証は最初のクリックのルールのみを取得し、ルールが変更された場合でもそれらのルールに固執します。つまり、ボタンのクリックでルールが変更された場合、検証で古いルールを破棄して新しいルールを適用したいのですが、何らかの理由でそれが行われていません。

助言がありますか?多分私はここで何か間違ったことをしていますか?

4

2 に答える 2

3

.validate()フォームでプラグインを初期化する方法です。ページ上で一度だけ呼び出すことができ、もう一度呼び出そうとすると、どんなオプションを渡しても何もしません。

したがって、ハンドラーから削除.validate()してclick、DOM 対応ハンドラー内に配置する必要があります。

私の知る限り、ルールを動的に変更する唯一の方法は、組み込みのrules('add')メソッドを使用してそれらを置き換えることです。

と呼ばれる入力のルールがある場合field1、最初は次のように定義されています...

rules: {
    field1: {
        required: true,
        number: true
    }
}

このフィールドのルールは、置き換えることによってのみ変更できます。rules('add')このような方法を使用して...

$('input[name="field1"]').rules('add', {
    required: true,
    number: false,
    minlength: 10
});

同じ設定で一度に多くのフィールドをターゲットにしたい場合は、jQuery.each()メソッドを組み込む必要があります。このようなもの...

$('input').each(function() {
    $(this).rules('add', {
        required: true,
        minlength: 10
    });
});
于 2013-07-11T20:01:19.980 に答える
0

ルールセットの内容によっては、逆に処理することもできます。ルールの内容を示すために使用する 1 つ以上の jquery 変数を用意し、検証ルール自体でこれらの変数をチェックします。(javascript 変数も使用できますが、スコープに注意する必要があります)。検証プラグインは、ルールの条件付き適用と、受け入れ/拒否が外部変数に部分的に基づいているカスタム ルールの両方を可能にします。

于 2013-07-11T19:50:57.037 に答える