jQueryvalidation动态输入数组

如何在动态数组中validation ? 像这样:

  

澄清一下:这个由PHP动态组装,所以我不知道索引是什么,所以这种方式是不可能的:

 $(this).validate({ rules: { "id_material[index]" : { required : true } } }); 

奇怪的是这个插件不起作用:

 $(this).validate({ rules: { id_material : { required : true } } }); 

我也尝试使用 required的CSS class ,但没有好处。

引用OP :“奇怪的是这个插件不起作用:
$(this).validate({ ... });

这并不奇怪。 它没有用,因为你没有真正针对任何东西。 $(this)没有任何意义的上下文或范围。

您必须正确定位

元素:

例如,通过id

 $('#myform').validate({ ... }); 

…或任何其他有效的jQuery选择器 ,其目标是您要validation的实际


以下是如何validation可以轻松适应您的情况的select元素的一般示例:

http://jsfiddle.net/Gy24q/

重要的是select元素中的第一个或默认option 必须包含value=""否则required规则将失败。 如果由于某种原因,您无法将此第一个optionvalue等于"" ,那么请参阅此答案的自定义方法解决方法和jsFiddle 。

HTML

 
....

由于您的name包含括号[] ,因此您还必须将字段名称括在引号中 :

jQuery

 $(document).ready(function () { $('#myform').validate({ // initialize plugin within DOM ready // other options, rules: { 'id_material[]': { required: true } }, }); }); 

上面的答案假设您知道select元素的name 。 但是,如果你不知道这个name ,你有两个选择……

1)select元素中使用class="required"

  

演示: http : //jsfiddle.net/Gy24q/4/

2)如果规则更复杂,您可以使用rules('add')方法根据现有的class分配添加复合rules

如果您有多个需要此规则的select元素,请使用jQuery .each()

 // must be called after validate() $('select.id_material').each(function () { $(this).rules('add', { required: true }); }); 

演示: http : //jsfiddle.net/Gy24q/10/

否则,这将仅将规则应用于具有class id_material 一个 select元素…

 $('select.id_material').rules('add', { required: true }); 

编辑:

在评论中引用OP:

执行validation后的函数内部: $('#formOrcamento').live('submit', function() {...}); 然后$(this).validate({...}); 指: $('#formOrcamento').validate ({...});

与…一样:

 $('#formOrcamento').live('submit', function() { $(this).validate({ ... }); }); 

是的,这正是它被打破的原因。

.validate()只在DOM上调用一次 ,准备初始化插件。 你不应该把它放在submit处理程序中。 Validate插件已经有了自己的内置事件处理程序,可以捕获表单的提交按钮。

根据我上面的工作jsFiddle演示设置你的代码。


编辑2:

在评论中引用OP:

我正在使用jquery-ui ,这会在以下选项中添加: style='display: none' 。 如果我通过Firebug删除display: none ,则选择validation并正确显示标签错误。 可能会发生什么?

默认情况下,Validate插件会忽略隐藏元素。 您需要通过添加ignore: []来关闭该选项以validate()

 $(document).ready(function () { $('#myform').validate({ ignore: [], // to allow validation of hidden elements // other options, }); }); 

有关更多信息,请参阅此答案 。

只需使用emtpy括号,并确保包括括号的名称在引号中(请参阅文档 ):

 $(this).validate({ rules: { "id_material[]" : { required : true } } });