Jquery - $ (это). Длина флажков или переключателей всегда 1 - PullRequest
0 голосов
/ 11 февраля 2012
<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 ]

3 голосов
/ 11 февраля 2012

$(this) в цикле .each() - это всегда ОДИН элемент dom - текущий элемент, обрабатываемый из списка результатов основного поиска.Если вы сделали

$('#studentFor input.mustEnter').length

, вы получите общее количество всех соответствующих элементов.

0 голосов
/ 13 февраля 2012

Я нашел путь:

Поскольку у меня есть два класса, 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;
 } ;
0 голосов
/ 11 февраля 2012

Внутри .each, this относится к одному предмету, а не к коллекции.Чтобы получить доступ к коллекции, вы, вероятно, хотите $(this).parent().length

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...