7

我有这些验证规则:

$("#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,无论编辑时加载的最大长度是多少)。

Please enter a value less than or equal to 156.

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

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

任何帮助是极大的赞赏。

4

4 回答 4

11

你不能这样改变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

于 2013-01-22T22:06:44.943 回答
4

你也可以这样做:

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

在这种情况下 :

length : {  required:  true, number: true, max: function () { return $("#maxlength").val()  }  }
于 2013-07-30T13:57:39.723 回答
0

change也许你可以在触发器中添加 sparky 方法

$('#maxlength').change(function() {
    $('#ed_details').rules('remove', 'length');
    $('#ed_details').rules('add', { length : { required: true, number: true, max: $('#maxlength').val() } });
});
于 2013-01-22T22:20:35.583 回答
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}'"));
  • 这是未经测试的代码...谨慎使用*
于 2013-01-22T22:28:08.817 回答