2014-01-05 129 views
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分別2,3,1-然後答案回答的陣列是[, 3,1]這是正確的,但假設我沒有選擇任何問題的答案任何兩個,並且第一個和第三個問題的選擇答案分別爲2,3然後根據我的代碼創建的數組是[2,2,3] 。但我需要的是,當我不選擇任何答案時,那個答案的值應該是0意味着上面的例子數組應該是[2,0,3]

我該如何實現它,請幫助我糾正單選按鈕的代碼

回答

0

使用ID:

例如:

if(document.getElementById('op1$i').checked) { 
    //radio button is checked 
+1

沒有ID等於'op1 $ i'的元素 –

+0

'

+0

不是因爲$ i是一個php變量在一個循環內部,例如在第一次迭代ID時給出等於:'op11'然後是'op12'等......這就是說,這是一個很好的建議來檢查DOM節點的屬性'checked',就像在你的回答中一樣 –

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

I我得到同樣的問題,如果我檢查第二個答案2,而不是選擇第三個問題,那麼數組將是[1,2,2] –

+0

如果你不允許答案的問題,然後添加一個特定的值,告訴你沒有答案被選中(如0)。如果用戶必須檢查答案,然後用警報(「你必須回答」)處理「缺少的答案」; – vlad142

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

這隻有在我不選擇第一個答案的答案時纔有效,但是當我選擇第一個答案並且不選擇下一個問題的答案時,第一個問題的答案放在數組中 –

相關問題