2009-08-11 3 views
8

未満を検証します。jQueryの「より小さい」バリデータを記述しようとしています。私が持っているので、もし私が、別のものに対して1つのテキストボックスを比較したい:jQueryは

<input type="text" id="value1" /> <input type="text" id="value2" /> 

私は私のバリデータが

$('#myForm').validate({rules: { value1: { lessThan: "#value2" } } }); 

に見えるようにしたい私はこれを試してみましたが、私はそれを動作させることはできません。

$.validator.addMethod('lessThan', function(value, element, param) { 
    var i = parseInt(value); 
    var j = parseInt($(param).val()); 
    return i >= j; 
}, "Less Than"); 

もう1つの質問は、このコードをどこに置くべきですか? $(document).readyまたはタグ内にありますか?

答えて

11

私はばかです。私は実際のコードでいくつかのタイプミスをしていました。私は多くのバリデータメソッドで見られるthis.Optional(要素)を台無しにしました。ここでは、作業機能は次のとおりです。ここで

$.validator.addMethod('lessThanEqual', function(value, element, param) { 
    if (this.optional(element)) return true; 
    var i = parseInt(value); 
    var j = parseInt($(param).val()); 
    return i <= j; 
}, "The value {0} must be less than {1}"); 

が凝縮されたバージョンが

ある
$.validator.addMethod('lessThanEqual', function(value, element, param) { 
    return this.optional(element) || parseInt(value) <= parseInt($(param).val()); 
}, "The value {0} must be less than {1}"); 

今、私はフィールド2を変更すると、フィールド1の検証を再実行する方法を理解する必要があります。

0

私は実際に独自のバリデータメソッドを記述することなくこれを行うことができると思います。

$('#myForm').validate({ 
    rules: { 
     value1: { 
      maxlength: $('#value2').val().length 
     } 
    } 
}); 

$('#value2').change(function() { 
    $('#value1').rules('remove', 'maxlength').rules('add', { 
     maxlength: $('#value2').val().length 
    }); 
}); 

またはより良いコードの重複のない

function getRule() { 
    return { 
     maxlength: $('#value2').val().length 
    }; 
} 

$('#myForm').validate({ 
    rules: { 
     value1: getRule() 
    } 
}); 

$('#value2').change(function() { 
    $('#value1').rules('remove', 'maxlength').rules('add', getRule()); 
}); 
+0

ありがとうございました。これは動作しますが、私はバリデータメソッドを動作させることができました。あなたは私にインスピレーションを与えた人でした。 –

+5

-1 OPが数字について話すとき、あなたは長さについて話す0_0 – bluish

1

あなたは以下のような、任意のドキュメント準備ブロック内のあなたの検証メソッドを挿入することができます。

$().ready(function() { 

    $.validator.addMethod("lessThan", 
     function(value, element, param) { 
      var i = parseFloat(value); 
      var j = parseFloat(param); 
      return (i < j) ? true : false; 
     } 
    ); 

}); 

私はこの変更を簡単にするようにしました。メソッドが "lessThan"と呼ばれる場合は、それだけでそれを行う必要があります。あなたのメソッドが実際に "より小さいか等しい"を実行する場合、より適切な名前を考えてください。

私もparseFloatを使用していますので、parseIntよりも柔軟性の高い方法が可能です。

バリデーター内から、正しく使用していました。したがって、10未満の検証のために:

$('#myForm').validate({ rules: { value1: { lessThan: "10"}} }); 

幸運!

+1

なぜそのような三項演算子を使用していますか?あなたのreturn文は 'return(i