Как проверить, выбран переключатель или нет

0

Я работаю над викториной. В том, что я хочу сделать, так это то, что вопросы собираются из базы данных и следуют с помощью php:

<div class="span12" style="margin-top:140px;">
<ul id="part">
<?php //print_r($quiz); 

$i = 1; 
foreach($quiz as $quiz)
{
    echo "<li id='div$i' style='display:none;'>
    <p style='font-size:20px;'><strong>Question $i </strong>: $quiz->Question </p>
    <br/><div style='margin-left:60px;font-size:14px;'>
    <input type='radio' name='op11' id='op1$i' value='1' style='opacity: 0;'>$quiz->op1<br/><br/>
    <input type='radio' name='op11' id='op2$i' value='2' style='opacity: 0;'>$quiz->op2<br/><br/>
    <input type='radio' name='op11' id='op3$i' value='3' style='opacity: 0;'>$quiz->op3<br/><br/>
    <input type='radio' name='op11' id='op4$i' value='4' style='opacity: 0;'>$quiz->op4<br/><br/></div>
    </li>";
    $i++;
}
?>
</ul>
<div class="span6">
<button id="next" class="btn btn-info btn-large" style="float:right;">Next &rarr; </button>
</div>
</div>

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

Когда выбран ответ, массив создается с исправлением, но когда я не выбираю никаких ответов, предыдущее значение вводится в массив.

Для этого я использую следующую функцию jquery:

<script>
$(function(){
    var items = $('ul#part li');
    var answers = new Array();
    if(items.filter(':visible').length == 0)
    {
        items.first().show();
    }
    $('#next').click(function(e){
        //e.preventDefault();
        var active = items.filter(':visible:last');
        active.hide();
        var val = $("input:radio[name=op11]:checked").val();

        console.log(val)
        answers.push(val)
        var next = active.next();
        if (next.length)
             next.show();
        else{
            console.log(answers);
        }

    });
});
</script>

Например: у меня есть три вопроса, и я выбираю ответы 2,3,1 соответственно, тогда массив ответов [2,3,1] правильный, но предположим, что я не выбираю ни одного ответа на вопрос два, а выбранный ответ первого и третьего вопросов равен 2,3, соответственно, созданный массив в соответствии с моим кодом - [2,2,3]. Но мне это нужно, когда я не выбираю никакого ответа, тогда значение этого ответа должно быть равным 0 для примера выше, массив должен быть [2,0,3]

Как я могу это достичь, пожалуйста, помогите мне в исправлении кода

Теги:
arrays

3 ответа

0
var val = $("input:radio[name=op11]:checked").val();

if (typeof(val) !== "undefined" && val !== null){

    answers.push(val);

}else{
    answers.push(0);
}

Вы должны проверить, что это не null или undefined. Если это (null или undefined), добавьте 0, иначе добавьте выбранное значение.

  • 0
    Это работает, только если я не выбираю ответ первого ответа, но когда я выбираю первый ответ и не выбираю ответ на следующий вопрос, тогда ответ на первый вопрос помещается в массив
0

Вы должны проверить, выбран ли текущий ответ. Попробуйте что-нибудь вроде:

if ($("input:radio[name=op11]:checked").length == 1) {
    //One item checked with that name
    var val = $("input:radio[name=op11]:checked").val();
} else { var val=0; }                //or handle the error some other way
  • 0
    Я получаю ту же проблему, что если я проверяю 2-й ответ 2 и не выбираю 3-й вопрос, то массив будет [1,2,2]
  • 0
    Если вы не разрешаете ответить на вопрос, добавьте конкретное значение, которое говорит о том, что ответ не был выбран (например, 0). Если пользователь ДОЛЖЕН проверить ответ, обработайте «пропущенный ответ» с помощью предупреждения («Вы должны ответить»);
0

Использовать идентификатор для переключателей:

пример:

if(document.getElementById('op1$i').checked) {
  //radio button is checked
  • 1
    нет элемента с идентификатором равным op1$i
  • 0
    <input type='radio' name='op11' id='op1$i' да, это так
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню