7

これらの検証ルールがあります:

$("#ed_details").validate({
    rules: {
        tagno: { required: true },
        itemid: { required: true },
        ralno: { required: true },
        feet: { required: true, number: true, min: 0 },
        inches: { required: true, number: true, min: 0 },
        cms: { required: true, number: true, min: 0 },
        length: { required: true, number: true, max: $('#maxlength').val() },
        qty: { required: true }
    }
});

これは lengths が検証するフィールドです。テスト用のテキストのみです。これが機能すると非表示になります。

<input type="text" name="maxlength" id="maxlength" value="<?=$maxL['ml']?>" />

これは、実行時に maxlength の値を変更しない限り (発生する可能性があります)、正常に機能します。ユーザーがドロップダウンから項目を選択しています。各アイテムには、使用できるチューブの最大長があります。アイテムが変更されると、画面上の maxlength の値が変更されます。ただし、検証を実行すると、元の長さに基づくエラー メッセージが表示されます (新しいアイテムの場合は 0、編集のロード時の最大長は何でも)。

Please enter a value less than or equal to 156.

maxlength フィールドに別の値が表示されている場合でも、これが表示されます。

フィールドで Firebug を使用すると、変更後も元の値が表示されます。また、コードではなく手動で maxlength フィールドを変更しても違いはありません。

どんな助けでも大歓迎です。

4

4 に答える 4

11

このままでは変えられないrules

length: { 
    required: true,
    number: true, 
    max: $('#maxlength').val()
},

これは、ほとんどの jQuery プラグインと同様に、プラグインを初期化するために1.validate()だけ呼び出されるためです ... 繰り返し実行されないため、オプションを動的に変更しても何も起こりません。formrules.validate()

rulesメソッドを使用してadd、ルールを動的に更新します。(値を変更するコードと一緒に使用します。)

$('#maxlength').rules("add", {
     max: $('#maxlength').val()
});

以下の非常に大雑把な「概念実証」デモを参照してください (再配置する余地があります)。フォームをテストします (値は最初は 5 です)。次に、ボタンを 1 回クリックすると、値とルール (メッセージとともに) が "2" に正しく更新されます。

http://jsfiddle.net/Y565M/

http://docs.jquery.com/Plugins/Validation/rules#.22add.22rules

于 2013-01-22T22:06:44.943 に答える
4

あなたもこのようにすることができます:

function ()  { return $("#maxlength").val()  }

この場合 :

length : {  required:  true, number: true, max: function () { return $("#maxlength").val()  }  }
于 2013-07-30T13:57:39.723 に答える
0

change多分あなたはトリガーにスパークリーメソッドを追加することができます

$('#maxlength').change(function() {
    $('#ed_details').rules('remove', 'length');
    $('#ed_details').rules('add', { length : { required: true, number: true, max: $('#maxlength').val() } });
});
于 2013-01-22T22:20:35.583 に答える
0

最大値を提供する入力のセレクターを渡すカスタム バリデーターを作成できます。

$.validator.addMethod("MaxFromValue", function (val, ele, arg) {
    var max = $(arg).val();
    return this.optional(ele) || !(val > max);
}, $.format("Value cannot be greater than '{0}'"));
  • これはテストされていないコードです...注意して使用してください*
于 2013-01-22T22:28:08.817 に答える