0

入力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 に変更されても赤のままです。

何か案が?

4

1 に答える 1

0

コードを jsFiddle で機能させることができません: http://jsfiddle.net/TcpnH/

おそらく、jsFiddle を作成できます。

いくつかのメモ:


1) 重要: すべての入力に属性が含まれている必要nameがあります。そうでない場合、このプラグインは意図したとおりに動作しません。namejQuery でそれを使用しない場合でも、それは必要です。

<input id="input1" name="input1" class="validation1" />

2)input1単純に 10 未満でなければならない場合、そのためのまったく新しいメソッドを作成するのはなぜですか ? 組み込みのmaxメソッド/ルールを使用するだけです。 max: 10


3) ドキュメントのどこにも見当たり$.validator.classRuleSettings.validation1= { validation1: true }; ませんし、目的もわかりません。classRuleSettings

通常、カスタム メソッド/ルールはclass要素に追加されますが、これは既に行っています。

<input id="input1" class="validation1" />

それ以外の場合は、原則として次のように宣言されます。

$('form').validate({
    rules: {
        myfieldname: {
            validation1: true
        }
    }
});
于 2013-02-28T17:44:18.163 に答える