入力1と入力2など、2つの数値入力を持つフォームがあります。
次の検証ルールが必要です。
- R1: input2 <= input1 * 0.2 (input1 または input2 の値が変更されるとトリガーされます)
- R2: 入力1 <10
R2 のことはしばらく忘れて、次のコードを見てください。
<input id="input1" class="validation1"/>
<input id="input2" class="validation2"/>
$.validator.addMethod("validation2", function (value, element) {
var v = Globalize.parseFloat(value);
var l = Globalize.parseFloat($('#input1').val());
return !l || !v || v <= l*0.2;
}, "Error");
$.validator.classRuleSettings.validation2= { validation2: true };
$.validator.addMethod("validation1", function (value, element) {
var validator = $("form").validate();
validator.element($('#input2'));
return true;
}, "should never be shown");
$.validator.classRuleSettings.validation1= { validation1: true };
このコードはかなりうまく機能します。input1 または input2 が変更されると、input2 の検証が呼び出されます。
それでは、validation1 を次のように編集して R2 を追加しましょう。
$.validator.addMethod("validation1", function (value, element) {
var validator = $("form").validate();
validator.element($('#input2'));
var v = Globalize.parseFloat(value);
return v && v<10;
}, "Input1 must be less than 10");
このコードは期待どおりに機能しますが、input1 が 10 より大きい値に設定されると赤くなり、値が <10 に変更されても赤のままです。
何か案が?