【问题标题】:JavaScript infinite loop upon clicking "Next" button单击“下一步”按钮时的 JavaScript 无限循环
【发布时间】:2012-11-20 09:03:11
【问题描述】:

距离我上一次做 JavaScript 已经有一段时间了,但是学校强迫我们做一个 JavaScript 项目。所以我在这里,做一个简单的问答游戏。相处得很好,但我遇到了一些可能非常简单的问题。

var useranswers = new Array();
var imgArray = new Array();
var answered = 0;
var currentQuestion = 0;

function renderQuizViaArray() 
{
    document.writeln('<h1>' + questions[currentQuestion] + '</h1>');

    for(i=0; i < choices[currentQuestion].length; i++)
    {
        document.writeln('<input type="radio" name="answer_' + currentQuestion + '" value="1" id="answer_' + currentQuestion + '_' + i + '" class="question_' + currentQuestion + '" onclick="submitAnswer(' + currentQuestion + ', this, \'question_' + currentQuestion + '\', \'label_' + currentQuestion + '_' + i + '\')" /><label id="label_' + currentQuestion + '_' + i + '" for="answer_' + currentQuestion + '_' + i + '"> ' + choices[currentQuestion][i] + '</label><br />');
    }

    document.write('<input type="submit" value="NEXT" onclick="nextQuestion()" />');
}

function nextQuestion()
{
    currentQuestion++;
    renderQuizViaArray();
}

每当我点击“NEXT”按钮时,它都会从一个数组中加载第二个问题(元素[1])以及另一个数组的答案到屏幕上。但页面仍处于无限加载状态,Firebug 给出消息:“重新加载以激活窗口控制台”

有人吗?

【问题讨论】:

  • 不要使用 document.write 如果必须,只需将该 HTML 连接到 body 标签的 innerHTML 属性值。此外,这不是无限循环。
  • choices[currentQuestion]的内容是什么?不应该是i &lt; choices.length吗?可能是 for 循环产生了一个无限循环。 @Asad 除了innerHTML 也是邪恶的事实;)
  • 不不,choices[currentquestion] 是一个字符串,所以它是正确的
  • @Cerbrus 这取决于选择的价值是什么。如果choices[index] 是一个数组(或任何其他有长度的),那么一切都很好。其实即使没有length属性也不会有死循环,因为i&lt;undefined == true对于所有的整数。
  • 复制问题的 jsfiddle 肯定会有所帮助。

标签: javascript arrays button firebug


【解决方案1】:

我可能已经找到了问题,但不知道如何解决。

只要我点击“NEXT”按钮,它就会执行函数 renderQuizViaArray();。这就是它完全搞砸的地方......我错过了什么吗?

我基本上想要的是,当前显示的文本会更新为下一个问题的数据,包括答案。

这些是它包含的文件: quiz.html:http://rapidimg.org/server/files/50ab9c326115cKAUf6S.png ........ quiz_questions.js:http://rapidimg.org/server/files/50ab9c536ed44UWhV54.png ...... quiz_functions.js:显示在主帖中

【讨论】:

    【解决方案2】:

    不要使用

    for(i=0; i < choices[currentQuestion].length; i++)
    

    使用

    for(i=0, j=choices[currentQuestion].length; i < j; i++)
    

    【讨论】:

    • 这是一个更好的编码解决方案,但我怀疑它是否能解决问题,但我的 js 不太好,所以请给我一个惊喜
    • 如果你要纠正一些无用的东西,至少要正确地纠正:) (var)
    • 我认为循环是由选择[currentQuestion].length 创建的,因为每次在循环内运行函数时长度都会增加。这会将长度值设置为变量并防止无限循环。
    • 为什么要增加长度?如果数组包含 3 个可能的答案,我怀疑这个值会改变,你只是阻止了长度的多次计算
    • 我不知道数组选择来自哪里,因为 OP 没有在示例中显示它。但我确实看到在循环内的函数中有类似变量的东西叫做 currentQuestion。这让我认为choices[currentQuestion].length 在循环中增加,这会产生无限循环。
    猜你喜欢
    • 2021-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-19
    • 2012-12-27
    • 2022-11-28
    • 1970-01-01
    • 2021-05-08
    相关资源
    最近更新 更多