【问题标题】:Quiz in Javascript with Arrays?用数组在 Javascript 中进行测验?
【发布时间】:2014-04-14 22:00:22
【问题描述】:

所以,我正在尝试在 Javascript 中创建一个测验,方法是使用 HTML 中文本输入的数字 id,然后运行一个 for 循环,并将输入与答案数组中的答案进行比较。

在 HTML 中:

<form>
    China<input type="text" id="0"><br>
    France<input type="text" id="1"><br>
    Japan<input type="text" id="2"><br>
    <input type="button" id="submitt" value="submit">
</form>

在 Javascript 中:

var answers = ["Beijing", "Paris", "Tokyo",];

$("#submitt").click(function() {
    var totalYes=0;
    function checkAnswers() {
        for(var i=0; i<answers.length; i++) {
            var userAnswer = document.getElementById(i);
            if(userAnswer.value===answers[i]) {
                totalYes++;
            }
        }
    }
    alert(totalYes);
    checkAnswers();
}); 

但代码没有将变量 totalYes 加 1(问题正确)。我也试过totalYes+=1totalYes + 1。 totalYes 的 alert 每次都显示为 0。

但我知道这是唯一不起作用的部分,因为当我将 totalYes 更改为正确和不正确的警报时,它会起作用:

var answers = ["Beijing", "Paris", "Tokyo",];

$("#submitt").click(function() {
    var totalYes=0;
    function checkAnswers() {
        for(var i=0; i<answers.length; i++) {
            var userAnswer = document.getElementById(i);
            if(userAnswer.value===answers[i]) {
                alert("Correct!");
            } else {
                alert("Incorrect!");
            }
        }
    }
    alert(totalYes);
    checkAnswers();
}); 

请帮忙?

【问题讨论】:

  • 您的 javascript 代码看起来不正确。函数中的函数?
  • @HeroFTime 为什么不呢?这是一个工作代码。
  • 因为每个问题都使用for 循环,所以任何答案都可以放入任何文本框中。示例:巴黎可以放在中国旁边的文本框中,你仍然会得到 1 对。

标签: javascript jquery html


【解决方案1】:

jsFiddle Demo

注意:因为totalYes 是一个全局变量,您需要在显示有多少用户正确后将其重置为 0

JS

var answers = ["Beijing", "Paris", "Tokyo", ];
var totalYes = 0;

$("#submitt").click(function (e) {
    checkAnswers();
    alert(totalYes);
    e.preventDefault();
});

function checkAnswers() {
    for (var i = 0; i < answers.length; i++) {
        var userAnswer = document.getElementById(i);
        if (userAnswer.value === answers[i]) {
            totalYes++;
        }
    }
}

旁注:这将是一个容易作弊的测试......只需查看源代码,您就可以看到 JavaScript 答案。也许你应该toLower() 文本然后md5sha1 答案。然后在检查它们时简单地做同样的事情

jsFiddle Demo

var answers = ["feecd450f4886bbed257e222fcf7609cbdd57a64", "3c4bd4d0d0d1e076ce617723edd6a73afc9126ab", "0f1aae8b8398c20f81e1c36e349a7880c9234c63", ];
var totalYes = 0;

$("#submitt").click(function (e) {
    checkAnswers();
    alert(totalYes);
    e.preventDefault();
    totalYes = 0;
});

function checkAnswers() {
    for (var i = 0; i < answers.length; i++) {
        var userAnswer = document.getElementById(i);
        if (Sha1.hash(userAnswer.value.toLowerCase()) === answers[i]) {
            totalYes++;
        }
    }
}

注意:您会看到一些sha1 代码,此代码取自http://www.movable-type.co.uk/scripts/sha1.html#code

这将使得没有彩虹表就不可能简单地查看源代码来获得答案,我希望这在一些小方面有所帮助


额外说明:因为每个问题都使用for 循环,所以任何答案都可以放入任何文本框中。示例:巴黎可以放在中国旁边的文本框中,你仍然会得到 1 对。

【讨论】:

    【解决方案2】:

    调用函数的顺序不正确。您首先提醒您的变量,然后开始计算正确答案。改为:

    $("#submitt").click(function() {
        var totalYes=0;
        function checkAnswers() {
            for(var i=0; i<answers.length; i++) {
                var userAnswer = document.getElementById(i);
                if(userAnswer.value===answers[i]) {
                    totalYes++;
                }
            }
        }
        checkAnswers(); // check answers at the first place
        alert(totalYes);
    }); 
    

    【讨论】:

      猜你喜欢
      • 2015-03-19
      • 1970-01-01
      • 2018-02-25
      • 1970-01-01
      • 2023-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-25
      相关资源
      最近更新 更多