Jquery - $(this).length复选框或单选按钮始终为1

时间:2012-02-11 04:50:39

标签: jquery radio-button

<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;
}

3 个答案:

答案 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;
 } ;