9

我正在尝试Less than为 jQuery 编写一个验证器。

我想将一个文本框与另一个文本框进行比较,所以如果我有:

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

我希望我validator看起来像

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

另一个问题是我应该把代码放在哪里?在标签$(document).ready中还是仅在<script>标签中?

4

5 回答 5

18

我是个白痴。我在我的实际代码中做了一些错字,并且我弄乱了我在很多验证器方法中看到的 this.optional(element)。这是工作功能:

$.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 的验证。

于 2009-08-11T15:57:26.427 回答
2

我认为您无需实际编写自己的验证器方法即可做到这一点。

$('#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());
});
于 2009-08-11T15:21:24.393 回答
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"}} });

祝你好运!

于 2009-08-11T15:37:36.280 回答
1

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

$("#form").validate({
    rules: {
        A: {
            lessThan: "#B"
        }
    }
});
于 2019-12-23T13:23:02.663 回答
0

我认为最好使用 HTMLmax属性。

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

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

于 2019-01-06T07:25:22.287 回答