当这是一个动态数组时,如何验证所有选择输入?像这样:
我使用了 Laravel 4.2 Blade
<tr><td> {{ Form::select('items[]', $items, null, array('class'=>'form-control items', 'required')) }} </td></tr>
这是表单验证代码
if ($('.val-form').length > 0) {
$('.val-form').validate();
}
然后我创建一个按钮来生成新的选择输入
$(document).on('click', '.add-item', function (e) {
var row = $(this).closest('tr').prev('tr').clone();
row.find('input').val('');
$(this).closest('tr').before(row);
e.preventDefault();
});
点击添加按钮后,表单仅验证 dom 输入,新添加的输入未验证
所有生成的输入均使用相同名称“items[]”创建
如果我忘记将任何项目值放入表单中,我会在服务器端获得带有空值的项目数组
'items' =>
array (size=2)
0 => string '42' (length=2)
1 => string '' (length=0) // this empty value cause i forget to fill all inputs
最佳答案
在jquery.validate.js中,我们可以找到一个名为checkForm的函数,我们必须对其进行如下修改才能修复。
checkForm: function() {
this.prepareForm();
for ( var i = 0, elements = (this.currentElements = this.elements()); elements[i]; i++ ) {
if (this.findByName( elements[i].name ).length != undefined && this.findByName( elements[i].name ).length > 1) {
for (var cnt = 0; cnt < this.findByName( elements[i].name ).length; cnt++) {
this.check( this.findByName( elements[i].name )[cnt] );
}
} else {
this.check( elements[i] );
}
}
return this.valid();
}
这将验证具有相同名称(例如“items[]”)的数组输入字段 我在这个link上找到了这个解决方案
关于jQuery 验证动态输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33942931/