【问题标题】:Vaildate dynamic added array inputs - jQuery Validate验证动态添加的数组输入 - jQuery Validate
【发布时间】:2015-11-22 10:05:46
【问题描述】:

下午好,

动态字段正在使用 jQuery 添加,我正在使用 jQuery Validate 插件来验证表单。

创建动态字段的代码取决于从选择框中选择的选项数量。

$('#ids_noct').on('change', function() {
  var tsd = ( this.value );
  for(var j=1; j <= tsd; j++) {
     $("#t").append("<input name="name_ct[]" id="id_ct' + j + '" type="text" 
   class="form-control" placeholder="Add Variant' + j + ' Name" >");
  }
});

要验证的jQuery代码:

$("#formsx").validate({
  rules: {
    "name_ct[]": {required: true}
  }

但只有这个 First 字段得到验证,而不是全部。

假设如果我添加了 5 个字段,那么 5 个字段中有 1 个被验证,而不是全部。

另外,我想知道我可以使用 PHP 和 jQuery Validate 上传图像。 });

【问题讨论】:

  • 我很想投反对票,但请解释一下……不知道为什么人们害怕对投反对票发表评论

标签: javascript php jquery jquery-validate


【解决方案1】:

您的代码中有几个基本问​​题。首先,您的附加调用没有正确设置引号 - 您不能以双引号开头,然后在其中包含双引号,它会引发错误。所以,你的电话应该看起来更像这样:

$("#t").append('<input name="name_ct[]" id="id_ct' + j + '" type="text" class="form-control" placeholder="Add Variant' + j + ' Name" >');

其次,您不能输入具有相同名称属性的文本类型的输入。因此,如果您有 5 个这些 name_ct 输入,则它们每个都需要有自己的名称:

$("#t").append('<input name="name_ct'+j+'" id="id_ct' + j + '" type="text" class="form-control" placeholder="Add Variant' + j + ' Name" >');

最后,当您在调用$.validate 之后添加新字段时,您还必须更新它的规则:

$('#ids_noct').on('change', function() {
  var tsd = ( this.value );
  for(var j=1; j <= tsd; j++) {
     $("#t").append('<input name="name_ct'+j+'" id="id_ct' + j + '" type="text" class="form-control" placeholder="Add Variant' + j + ' Name" >');
     $('#id_ct'+j).rules('add',{
       required:true
     });
  }
});

不知道你到底想用这些 name_ct 值做什么,我不能说你应该如何重新组合它们,但在 $.validate 的submitHandler 中,你可以在执行 @ 之前根据需要更改数据987654328@.

在这里查看它的工作原理:http://jsfiddle.net/ryleyb/6syqa60d/

【讨论】:

  • 嘿!感谢您的解释....名称相同,因为我想在 DB 中相同所有这些数组值....我采用这种方法来获取数组 PHp mySQL DB 中的值
  • 是的,看起来很合理 - 您可以在提交之前收集这些值并将它们放回 name_ct[]... 像这样的东西:jsfiddle.net/ryleyb/6syqa60d/1
  • 看起来很糟糕....我可以使用这种方法上传图片吗..你可以投票给问题,因为有人在没有任何 cmets 的情况下投票
【解决方案2】:

请在下面找到相关的示例解决方案:

HTML:

<form name="signupForm" class="cmxform" id="signupForm" method="get" action="">
<select name="category[]" id="cat_1">
<option value="">Select One</option>
<option value="1">aa</option>
<option value="2">bb</option>
<option value="3">cc</option>
<option value="4">dd</option>
</select>

<select name="category[]" id="cat_2">
<option value="">Select One</option>
<option value="5">ee</option>
<option value="6">ff</option>
<option value="7">gg</option>
<option value="8">hh</option>
</select>

<select name="category[]" id="cat_3">
<option value="">Select One</option>
<option value="9">ii</option>
<option value="10">jj</option>
<option value="11">kk</option>
<option value="12">ll</option>
</select>

<input class="submit" type="submit" value="Submit">
</form>

现在我们将使用 jquery 验证插件 jquery.validate.js 来验证表单。条件是用户必须从每个下拉列表中选择类别。验证脚本如下:

<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="jquery.validate.js"></script>
<script type="text/javascript">
$().ready(function() {
// validate the comment form when it is submitted
$("#signupForm").validate({
rules: {
"category[]": "required"
},
messages: {
"category[]": "Please select category",
}
});
});
</script>

现在的问题是现成的 jquery.validate.js 只验证 category[] 的第一个元素。所以,我们需要稍微修改一下。

在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();
}

【讨论】:

  • 您不能有多个select 元素共享同一个name 属性。这个插件要求每个考虑验证的元素都包含一个唯一的name 属性。
【解决方案3】:

尝试使用

$.validator.addClassRules("customer", { cRequired: true });

来自文档http://jqueryvalidation.org/reference

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-21
    • 2012-07-17
    • 1970-01-01
    • 2015-10-17
    • 1970-01-01
    相关资源
    最近更新 更多