1

我正在用这个撕裂头发,初学者警报。

尝试使用直接 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;
        }
     }
 }

正如我所说,我对此仍然很陌生,希望这是一个简单的解决方案。

谢谢

4

3 回答 3

3

你用的是j,不是i

只需替换answerChoices[i]answerChoices[j].

于 2013-04-24T19:32:27.247 回答
1

正如其他人指出的那样,您遇到了循环错误。

您还必须checkAnswer();在更新选项之前。

然后你应该检查你是否有更多问题:

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

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

于 2013-04-24T19:45:58.190 回答
0

更新了它。索引 i 和 j 是混合的。尝试演示

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>

这样,您可以单击名称来选择收音机。

于 2013-04-24T19:43:35.193 回答