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
元素的一般示例:
重要的是 , select
元素中的第一个或默认option
必须包含value=""
否则required
规则将失败。 如果由于某种原因,您无法将此第一个option
的value
等于""
,那么请参阅此答案的自定义方法解决方法和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 } } });