<TD>
<input type="text" name="name1" size="35" class="mustEnter" />
</TD>
<TD>
<input type="radio" name="name2" value="val1" class="mustCheck"/>
<input type="radio" name="name2" value="val2" class="mustCheck"/>
<input type="radio" name="name2" value="val3" class="mustCheck"/>
</TD>
<TD>
<input type="checkbox" name="name3" value="valA" class="mustCheck"/>
<input type="checkbox" name="name3" value="valB" class="mustCheck"/>
<input type="checkbox" name="name3" value="valC" class="mustCheck"/>
</TD>
我想测试是否检查了必填字段(在这种情况下是收音机和复选框),但它不起作用。
each()
三次通过单选按钮(或复选框),$(this).length
始终为1.我想避免按名称进行测试,因为列表可能很长。会有什么解决方案?
valid = true;
$("#studentForm input.mustEnter, #studentForm input.mustCheck").each(function() {
if( ($(this).hasClass('mustEnter') && $(this).val() != false )
|| ($(this).hasClass('mustCheck') && $(this).length > 0) ) {
$(this).parent().removeClass("errorHighlight");
}
else {
$(this).parent().addClass('errorHighlight');
valid = false;
}
答案 0 :(得分:3)
$(this)
循环中的 .each()
始终是SINGLE dom元素 - 当前元素是从主搜索结果列表中处理的。如果你做了
$('#studentFor input.mustEnter').length
您将获得所有匹配元素的总数。
答案 1 :(得分:0)
在.each
内,this
指的是单个项目,而不是集合。要访问该集合,您可能需要$(this).parent().length
答案 2 :(得分:0)
我找到了方法:
由于我有两个类,mustEnter
用于常规字段,mustCheck
用于无线电和复选框,我使用mustCheck类获取元素的名称,然后使用名称来测试是否检查组中的至少一个(在这种情况下为三个)。我只需要在组中的一个项目中使用mustCheck
类。
function validate_v3(frm) {
valid = true;
$("#studentForm input.mustEnter").each(function() {
if ($(this).val() != false ) {
$(this).parent().removeClass("errorHighlight");
}
else {
$(this).parent().addClass('errorHighlight');
valid = false;
}
});
$("#studentForm input.mustCheck").each(function() {
elmtName = $(this).attr("name");
if ($("#studentForm input[name='"+elmtName+"']:checked").length > 0) {
$(this).parent().removeClass("errorHighlight");
}
else {
$(this).parent().addClass('errorHighlight');
valid = false;
}
});
return valid;
} ;