jQuery验证不到

时间:2009-08-11 15:09:20

标签: jquery jquery-validate

我正在尝试为jQuery编写一个“Less than”验证器。我想比较一个文本框和另一个文本框,所以如果我有:

<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");

另一个问题是我应该在哪里放置该代码?在$(文件).ready或只是在标签中?

5 个答案:

答案 0 :(得分:14)

我是个白痴。我在我的实际代码中做了一些拼写错误,我搞砸了我在很多验证器方法中看到的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}");

现在我需要弄清楚当我更改field2时如何重新运行字段1的验证。

答案 1 :(得分:1)

我认为你可以在不编写自己的验证方法的情况下做到这一点。

$('#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());
});

答案 2 :(得分: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"}} });
祝你好运!

答案 3 :(得分:0)

我认为最好使用HTML max属性。

<input type="number" placeholder="Marks" required name="marks" max="100">

验证将是,请输入一个小于或等于100的值。此外,对于小于100的值,您还可以将最大值更改为99。

答案 4 :(得分:0)

考虑(A)是您希望其值小于(#B)输入的输入的名称。 在确定两个输入的类型之后,此代码与我一起使用了:type="number"

$("#form").validate({
    rules: {
        A: {
            lessThan: "#B"
        }
    }
});