jQuery验证 - 在运行时更改max的值

时间:2013-01-22 21:59:23

标签: jquery jquery-validate

我有这些验证规则:

$("#ed_details").validate({
    rules: {
        tagno: { required: true },
        itemid: { required: true },
        ralno: { required: true },
        feet: { required: true, number: true, min: 0 },
        inches: { required: true, number: true, min: 0 },
        cms: { required: true, number: true, min: 0 },
        length: { required: true, number: true, max: $('#maxlength').val() },
        qty: { required: true }
    }
});

这是长度有效的字段。它仅用于测试目的的文本。一旦工作,它将被隐藏。

<input type="text" name="maxlength" id="maxlength" value="<?=$maxL['ml']?>" />

除非我在运行时更改maxlength的值(这可能发生),否则这样可以正常工作。用户正在从下拉列表中选择项目。每个项目都有一个可以与之一起使用的最大管道长度。当项目更改时,maxlength的值会在屏幕上更改。但是,当验证运行时,我会看到一条基于原始长度的错误消息(对于新项目为0,无论编辑时加载的maxlength是多少)。

Please enter a value less than or equal to 156.

即使maxlength字段显示另一个值,我也会看到这一点。

如果我在场上使用Firebug,即使在更改后也会显示原始值。此外,手动而不是代码更改maxlength字段并没有什么区别。

非常感谢任何帮助。

4 个答案:

答案 0 :(得分:7)

你可以改变rules这样......

length: { 
    required: true,
    number: true, 
    max: $('#maxlength').val()
},

这是因为,与大多数jQuery插件一样,.validate()仅被一次时间调用初始化 form上的插件...不会重复运行,因此动态更改rules中的.validate()选项不会做任何事情。

使用rules方法add并动态更新规则。 (与改变值的代码一起使用。)

$('#maxlength').rules("add", {
     max: $('#maxlength').val()
});

请参阅下面非常粗略的“概念证明”演示(可以重新安排的空间)。测试表单(值最初为5)。然后单击该按钮一次,值和规则(以及消息)正确更新为“2”。

http://jsfiddle.net/Y565M/

http://docs.jquery.com/Plugins/Validation/rules#.22add.22rules

答案 1 :(得分:2)

你也可以这样做:

function ()  { return $("#maxlength").val()  }

在这种情况下:

length : {  required:  true, number: true, max: function () { return $("#maxlength").val()  }  }

答案 2 :(得分:0)

也许你可以在change触发器

中添加引人注目的方法
$('#maxlength').change(function() {
    $('#ed_details').rules('remove', 'length');
    $('#ed_details').rules('add', { length : { required: true, number: true, max: $('#maxlength').val() } });
});

答案 3 :(得分:0)

您可以创建一个自定义验证程序,该验证程序在选择器中传递将提供最大值的输入:

$.validator.addMethod("MaxFromValue", function (val, ele, arg) {
    var max = $(arg).val();
    return this.optional(ele) || !(val > max);
}, $.format("Value cannot be greater than '{0}'"));
  • 这是未经测试的代码...请谨慎使用*