2013-04-24 26 views
1

我正在撕裂這頭毛髮,初學者警惕。DOM問題,不確定對象是否存在? JavaScript

嘗試使用直接JS而不是JQuery來構建基本測驗,沒有多少運氣。

我不知道如何正確循環單選按鈕來檢查用戶選擇。我很確定我的代碼是正確的,但它不起作用。

這是否與事實相關的'名稱'由.innerHTML生成,因此在頁面加載時技術上不存在?

這裏有一個的jsfiddle:http://jsfiddle.net/AU2ve/

這是我的循環,正如我所說的,我敢肯定是好的。

// Check which answer selected (Test) 

function checkAnswer() { 

    var answerChoices = document.getElementsByName('choices'); 

    for (var j = 0; j < answerChoices.length; j++) {  
     if (answerChoices[i].checked) { 
      alert(answerChoices[i].value); 
      break; 
     } 
    } 
} 

正如我所說,我對此仍然很陌生,希望這是一個簡單的解決方案。

感謝

+0

我確定使用jQuery,好了,我得到。我只是覺得我*應該*知道如何去做這個沒有它的東西。 – 2013-04-24 19:35:40

+0

在您檢查舊問題是否被正確回答之前,您正在使用新問題**更新DOM。 – Pointy 2013-04-24 19:46:40

回答

1

正如其他人指出,你有一個循環錯誤。

在更新選項之前,您還必須checkAnswer();

那麼你應該檢查,如果你有更多的問題:

if (typeof allQuestions[xNum - 1] !== "undefined") {

更新小提琴:http://jsfiddle.net/AU2ve/3/

+0

太棒了,謝謝!我認爲這與它所稱的訂單有關。 – 2013-04-24 19:48:15

3

您使用j,不i

只需將answerChoices[i]替換爲answerChoices[j]即可。

+0

它仍然沒有工作,但感謝您發現錯誤! – 2013-04-24 19:36:48

+0

'替換問題後調用checkAnswer' ... http://jsfiddle.net/AU2ve/4/ – 2013-04-24 19:45:03

0

更新了它。索引i和j是混合的。嘗試DEMO

for (var j = 0; j < answerChoices.length; j++) { 
    if (answerChoices[j].checked) { 
     alert(answerChoices[j].value); 
     break; 
    } 
} 

同時檢查是否存在問題泳池的長度呈現之前:

if (allQuestions.length > xNum - 1) { 

同樣的錯誤在你的HTML格式:

newHtml += '<label><input type="radio" name="choices" value="' + allQuestions[xNum - 1].choices[i] + '" />' + allQuestions[xNum - 1].choices[i] + '<label>'; 

正如你會發現我也有包圍你的投入標籤:

<label><input type="radio" name="choices" value="David Cameron">David Cameron</label> 

這樣您可以點擊名稱來選擇收音機。

+0

嘿,非常感謝。 – 2013-04-24 19:48:59