jQuery Validate动态创建的数组输入元素
我有一个表单,我想使用jQuery Validation插件进行validation 。 我目前在输入元素与数组( name="inputname[]"
)有问题,这是使用jQuery .on()
动态创建的。 让我解释一下这个问题:
- 有一个表单,其中一个输入文本名为
name[]
。 - 有一个按钮可以添加更多输入文本,这个元素用.on()执行。 我点击了2到3次,因此会有超过1个输入文本。
- 我单击提交,表单正确validation但它只validation第一个创建的数组元素而不是另一个元素。
对于完整代码,我在这里创建了一个jsfiddle: http : //jsfiddle.net/ThE5K/4/
jQuery :
$(document).ready(function () { // MODE 1 // With [] or array name <<<< this one is not working $("#addInput").on('click', function () { $('#inputs').append($('')); }); /* MODE 2 Without [] or array name <<<< this one is working var numberIncr = 1; $("#addInput").on('click', function () { $('#inputs').append($('')); numberIncr++; }); */ $('form.commentForm').on('submit', function (event) { $('input.comment').each(function () { $(this).rules("add", { required: true }) }); event.preventDefault(); console.log($('form.commentForm').valid()); }) $('form.commentForm').validate(); });
HTML :
我在其中创建了两种模式,即工作模式(没有数组名称的动态输入文本)和不工作模式(具有数组名称的动态输入文本)。
我一直在寻找那些解决方案,但遗憾的是他们中没有人工作过:
- jqueryvalidation为数组输入添加规则
- jquery validate不支持动态内容
- jQueryvalidation动态输入数组
请帮忙。
关于创建新字段的代码:
// Mode 1 $("#addInput").on('click', function () { $('#inputs').append($('')); });
“模式1”无法正常工作的全部原因是因为您为每个新input
分配了相同的名称属性name="name[]"
。 jQuery Validate插件绝对要求每个input
元素都具有唯一的 name
属性。 只需在name[]
使用numberIncr
变量即可确保此唯一名称。
此外,您真的不应该在submit
添加规则。 submit
事件通常是检查所有规则的地方,因此此时添加规则并没有多大意义。 创建新输入字段时,应添加新规则。
对于你的简单情况, rules('add')
方法对此无论如何都是过度的,你可以完全消除你的.on('submit')
处理程序。 由于规则是required
,您只需在新的input
元素中添加class="required"
即可。
这是工作代码:
jQuery :
$(document).ready(function () { // MODE 1 var numberIncr = 1; $("#addInput").on('click', function () { $('#inputs').append($('')); numberIncr++; }); $('form.commentForm').validate(); });
演示: http : //jsfiddle.net/ThE5K/6/