我有这些验证规则:
$("#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字段并没有什么区别。
非常感谢任何帮助。
答案 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://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}'"));