web-dev-qa-db-ja.com

jquery-validate-addMethod-2つのテキストボックスを参照するカスタムルールを適用する方法

jQuery validation plugin を使用していて、状況が有効かどうかを判断するときに、2つの異なるテキストボックスに入力された2つの値を考慮するカスタムメソッドを利用したいと思います。

メソッドの追加 について知っており、例を見つけました...

jQuery.validator.addMethod("math", function(value, element, params) { 
 return this.optional(element) || value == params[0] + params[1]; 
}, jQuery.format("Please enter the correct value for {0} + {1}"));

...これは2つの要素を参照しますが、このようなメソッドを利用するルールをどのように書くのかわかりませんか?

議論を簡単にするために、この例のメソッドを利用したいと思い、このようなフォームを持っていると想像してください。

<form id="TOTALSFORM" name="TOTALSFORM">
    <label for="LHSOPERAND">Input 1</label>
    <br />
    <input type="text" name="LHSOPERAND" id="LHSOPERAND" class="required" />
    <br />
    <label for="RHSOPERAND">End</label>
    <br />
    <input type="text" name="RHSOPERAND" id="RHSOPERAND" class="required" />
    <label for="TOTAL">End</label>
    <br />
    <input type="text" name="TOTAL" id="TOTAL" class="required" />
</form>

私はこのように私が適用する他のルールを持っています:

$("#OPTREASON").rules("add", {
    required: true,
    min: 0,
    messages: {
        required: "Required input",
        min: "Please select a Reason"
    }
});

「TOTAL」が「LHSOPERAND」と「RHSOPERAND」の合計としてチェックされるように、例のカスタムメソッドを適用するのと同じようなことをするにはどうすればよいですか。

17
shearichard

以下を試してください:

ルールを作成します

jQuery.validator.addMethod("checkTotal",function(value) {
    total = parseFloat($('#LHSOPERAND').val()) + parseFloat($('#RHSOPERAND').val());
    return total == parseFloat($('#TOTAL').val());
}, "Amounts do not add up!");

jQuery.validator.classRuleSettings.checkTotal = { checkTotal: true };

入力

<input type="text" name="TOTAL" id="TOTAL" class="required checkTotal" />

Init Validation

$(document).ready(function() {
    $("#TOTALSFORM").validate();
});

ここでフィドル: http://jsfiddle.net/wTMv3/

36
dSquared