jQuery 验证动态输入

标签 jquery forms laravel input jquery-validate

当这是一个动态数组时,如何验证所有选择输入?像这样:

我使用了 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 输入,新添加的输入未验证

enter image description here

所有生成的输入均使用相同名称“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/

相关文章:

mysql - 使用 Postgres 在 Laravel 5.3 中更新区分大小写的数据库字段

php - postman 返回 404,而网站返回 200

javascript - 解析html页面后触发点击事件

jquery - 如何在您点击的位置准确显示图像? jQuery

javascript - jQuery - 如何从文本区域/输入中获取选定的文本?

jQuery,如何从表单选择中检查选定的选项?

javascript - 下载选项表单的两个 onClick 事件

javascript - CAKEPHP 表单检索

Laravel 限制基于客户/用户/租户的内容

jquery - 在 WordPress 中使用 ajax 下载文件