【问题标题】:jQuery validate dynamic inputs [duplicate]jQuery验证动态输入[重复]
【发布时间】:2016-02-29 19:15:56
【问题描述】:

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

我用的是 laravel 4.2 刀片

<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

【问题讨论】:

  • 刷新 $('.val-form').validate();添加输入后
  • 我已经尝试刷新 $('.val-form').validate();添加输入后但没有解决问题
  • 你在使用一些验证插件吗?请使用生成的 HTML 和使用的 JS 创建fiddle

标签: jquery forms laravel input jquery-validate


【解决方案1】:

在 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 上找到了这个解决方案

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-24
    • 2018-08-02
    • 1970-01-01
    相关资源
    最近更新 更多