JavaScript « Проверка радиокнопок на checked

Код проверки радиокнопок постоянно говорит что не все радиокнопки выбраны, хотя они все выбраны. Как это исправить?

/** * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann * (http://qbnz.com/highlighter/ and http://geshi.org/) */ .javascript.geshi_code {font-family:monospace;} .javascript.geshi_code .imp {font-weight: bold; color: red;} .javascript.geshi_code .kw1 {color: #000066; font-weight: bold;} .javascript.geshi_code .kw2 {color: #003366; font-weight: bold;} .javascript.geshi_code .kw3 {color: #000066;} .javascript.geshi_code .co1 {color: #006600; font-style: italic;} .javascript.geshi_code .co2 {color: #009966; font-style: italic;} .javascript.geshi_code .coMULTI {color: #006600; font-style: italic;} .javascript.geshi_code .es0 {color: #000099; font-weight: bold;} .javascript.geshi_code .br0 {color: #009900;} .javascript.geshi_code .sy0 {color: #339933;} .javascript.geshi_code .st0 {color: #3366CC;} .javascript.geshi_code .nu0 {color: #CC0000;} .javascript.geshi_code .me1 {color: #660066;} .javascript.geshi_code span.xtra { display:block; }
$('input[name^="vopros"]', '#online_test').each(function() {
                  if (!$(this).is("checked"))
        {
          alert ('Вы ответили не на все вопросы');
          return false;
        }
         
        });

1 ответов



$('table.assay tr').each(function(){
    if ($(this).find('input[name^="vopros"]').length > 0 && $(this).find('input[name^="vopros"]:checked').length == 0) {
        alert('Fail!');
        return false;
    }
});

Без полного кода трудно ответить, но может быть так понятнее и короче?

if($('input[name^="vopros"]').size() != $('input[name^="vopros"]:checked').size() ){
     alert ('Вы ответили не на все вопросы');
}

Сравниваем количество всех чекбоксов(я надеюсь у вас все чекбоксы начинаются с vopros) с количеством отмеченных.

UPD :

Теперь когда есть реальный пример, можно попробовать так

$('table.assay tr').each(function(index){
  if($('input[name^="vopros'+index+'"]:checked').size() == 0){
      alert ('Вы ответили не на все вопросы');
      return false;
  }
});

У вас $('input[name^="vopros"]') возвращает все радиокнопки (то есть по 3 на вопрос, 63 в сумме)
$('input[name^="vopros"]:checked') возвращает только выбранные радиокнопки (то есть 1 на вопрос, 21 в сумме).

Поэтому условие не срабатывает.

Самое простое решение в лоб

if( ($('input[name^="vopros"]').size()/3) != $('input[name^="vopros"]:checked').size() )

А вообще я бы посоветовал количество вопросов по другому определять.
Обернуть каждый текстовый вопрос в и использовать в левой части условия

$('span.vopros').size()