如果您要将表单字段动态添加到现有表单中,添加验证的最佳方法是什么?
考虑这个小提琴:http://jsfiddle.net/yWGK4/
<form action="#" method="post">
<div id="parent">
<div class="child">
<input type="checkbox" name="box1[]" value="1" /> 1
<input type="checkbox" name="box1[]" value="2" /> 2
<input type="checkbox" name="box1[]" value="3" /> 3
</div>
</div>
</form>
<button id="addBoxes">Add Boxes</button>
<script>
$(function() {
var parentdiv = $('#parent');
var m = $('#parent div.child').size() + 1;
$('#addBoxes').on('click', function() {
$('<div class="child"><input type="checkbox" name="box'+m+'[]" value="1" /> 1 <input type="checkbox" name="box'+m+'[]" value="2" /> 2 <input type="checkbox" name="box'+m+'[]" value="3" /> 3 </div>').appendTo(parentdiv);
m++;
return false;
});
});
</script>
在该表单上,我添加了新的复选框组,并希望确保每个组中至少有一个框被选中(不是所有组中的一个框)。有人有任何聪明的方法吗?由于动态添加字段,我所看到的一切都会变得非常复杂。
答案 0 :(得分:2)
在提交等方面进行验证时,复选框是否是动态的并不重要。所以这样的事情会检查每个.child
是否至少检查了一个复选框:
$('form').on('submit', function(e) {
e.preventDefault();
var valid = true;
$('.child').each(function() {
if ( ! $('[type="checkbox"]:checked', this).length ) // no box checked
valid = false;
});
if (valid) {
this.submit();
}else{
alert('error');
}
});
答案 1 :(得分:0)
如果你想使用jQuery检查它,可以使用`.each()
$(".child").each(function(){
var $this = $(this);
var checked = $this.find("input:checked");
if( checked.lenght == 0 ) {
alert("This group is not valid");
}
});
您可以在以下链接中找到有关此jQuery函数的更多信息: each()
答案 2 :(得分:0)
这就是我想出的。基本上你循环遍历.child组并测试它们是否有一个处于选中状态的复选框..
$('#checkBoxes').on('click', function(){
var uncheckedgroups = new Array();
$('.child').each(function(childindex, childelement){
var checkFound = 0;
$('.child').each(function(index, element){
if($(element).is(':checked')){
checkFound = 1;
}
});
if(checkFound == 0){
uncheckedgroups.push(childindex);
}
});
if(uncheckedgroups.length > 0){
alert("the following groups have no checked checkbox: " +
uncheckedgroups.join(','));
}
});