jQuery使用动态数量的字段进行验证

时间:2009-06-20 04:32:27

标签: jquery dynamic field validation

我有一个表格,其中一个舞台具有动态数量的字段组,其中的数字基于前一阶段的答案。

我将服务器端字段生成为数组,即

<input id="foo[0]"...
<input id="bar[0]"...

<input id="foo[1]"...
<input id="bar[1]"...

<input id="foo[2]"...
<input id="bar[2]"... etc

无论数量多少,所有字段都是必需的&amp;我还需要验证类型和&amp;在某些情况下的位数。我正在使用jQuery validate plugin进行客户端处理(是的,也支持服务器端的东西)&amp;由于表单需要通过XHTML Strict,因此验证无法内联完成(编辑:请参阅下面的我的附录)。

我的问题是我无法弄清楚如何使用动态数量的字段进行验证。以下是表单其余部分的验证语法通常的样子:

$(document).ready(function() {

    // validate stage_form on keyup and submit
    var validator = $("#form_id").validate({

        // rules for field names
        rules: {

            name: "required", 
            address: "required",
            age: { required: true, number: true }

        },

        // inline error messages for fields above
        messages: {

            name: "Please enter your name", 
            address: "Please enter your address",
            age: { required: "Please enter your age", number: "Please enter a number" }

        }

    });

});

5 个答案:

答案 0 :(得分:13)

实际上它应该工作如果你使用类而不是初始化规则作为validate()选项。

标记:

<input id="foo[0]" class="required"
<input id="bar[0]" class="required number"

<input id="foo[1]" class="required"
<input id="bar[1]" class="required email"

jQuery的:

$(document).ready(function() {

  var validator = $("#form_id").validate({
    messages: {
            name: "Please enter your name", 
            address: "Please enter your address",
            age: { 
               required: "Please enter your age", 
               number: "Please enter a number" 
            }

    }

  });

});
希望这有效。 思南。

答案 1 :(得分:2)

您是否尝试使用custom class rules来定义xhtml不兼容的规则?

docs中的示例仅使用一个类,但我想您可以组合不同的自定义类来实现所需的验证规则。我没有为自己试过这个。

答案 2 :(得分:0)

没有答案所以我会发布我的“临时”解决方案,即为'required'和'type'设置内联验证规则,将'maxlength'留给服务器端检查,然后显示带有内联标题的自定义消息标签。

这对于这项工作来说可能已经足够了,但我仍然很好奇是否有办法在jQuery中“完全”完成它。

答案 3 :(得分:0)

这是另一种方法。

gnomeAware@devserv:~$ tar tf test.tar
File1.tar.gz
File2.tar.gz
File3.tar.gz
File4.tar.gz

答案 4 :(得分:-2)

我找到了使用“元数据”的方法。

这应该在具有动态名称的模板中使用。所以,我不需要知道这个名字。

使用纯javascript和干净标签的代码仍然无法实现缺点。

<script src="jquery.metadata.js" type="text/javascript"></script>

<input validate="{required: true, email: true, messages: { required: 'i'm required', 'i'm not valid e-mail' }}" name="dynamicRow[  myRandomNumber ]"type="text" class="input_normal" />

 $( function() {
     // setup stuff
     $.metadata.setType("attr", "validate"); 
});