比较两个函数的返回值(动态测验)

时间:2014-05-16 17:04:10

标签: javascript

背景

我正在创建一个用JavaScript编写的动态多项选择测验作为此course的高潮。我正在遵循课程作者在后续post中概述的寄生继承模式,并且无法完成项目。

问题

如果您参考此JSBIN,您将看到我已经创建了loadQuestion,displayQuestion,getUserAnswer,getCorrectAnswer和checkAnswer的函数。 checkAnswer是我被困的地方。在这个函数id中,要检查getUserAnswer的返回值是否等于当前加载的问题的getCorrectAnswer的返回值,如果是,请立即将一个字符串记录到控制台。

Question.prototype.displayQuestion = function(){
    var questionToDisplay = '<div class="question">' + this.question + '</div><ul>';
    choiceCounter = 0;
    var quizDiv = document.getElementById('quiz');
    this.choices.forEach(function(eachChoice){
        questionToDisplay += '<li><input type="radio" name="choice" value="' + choiceCounter + '">' + eachChoice + '</li>';
        choiceCounter++;
    });
    questionToDisplay += '</ul>';
    quizDiv.innerHTML = questionToDisplay;
};

var i = 0;
Question.prototype.loadQuestion = function(){
    if(i < allQuestions.length){
        var quest = new MultipleChoiceQuestion(allQuestions[i].question, allQuestions[i].choices, allQuestions[i].correctAnswer);
        quest.displayQuestion();
        i++;
        return quest.getCorrectAnswer();
    }
};

Question.prototype.getCorrectAnswer = function() {
    return this.correctAnswer;
};

Question.prototype.getUserAnswer = function(){
    var radio = document.getElementsByName('choice');
    for(var i=0; i < radio.length; i++){
        if(radio[i].checked){
            return radio[i].value;
        }
    }
};

//Non-functioning code, this is what im trying to figure out.

/*Question.prototype.checkAnswer = function(){
    if(Question.prototype.loadQuestion() == Question.prototype.getUserAnswer()){
        console.log('it worked!');
    } else {
        console.log('keep trying!');
    }
};*/

//Load the first question
Question.prototype.loadQuestion();

var button = document.getElementById('next');
button.onclick = function(){
    //get the user-selected radio input.
    Question.prototype.getUserAnswer();

    //Question.prototype.checkAnswer();

    //load next question
    Question.prototype.loadQuestion();
};

我是javascript(和编程)的新手,并怀疑问题在于对返回值如何工作的一些误解?

谢谢!

2 个答案:

答案 0 :(得分:0)

发现问题。

你没有在radio [i]的值上加1。请记住,这是一个数组,因此所有索引将减少1,因为我们从0开始计数。

这是你的功能:

Question.prototype.getUserAnswer = function(){
    var radio = document.getElementsByName('choice');   
    for(var i=0; i < radio.length; i++){
        if(radio[i].checked){            
            return +(radio[i].value) + 1;
        }
    }
};

答案 1 :(得分:0)

我现在意识到问题更多的是我的方法而不是任何一个错误。我跟随并改进了另一名学生的例子。这是项目的repo。我学到的最重要的事情是如何封装我需要所有函数来访问的变量。在这种情况下,一个名为currentQuestionIndex的变量递增并可供所有函数使用,这对解决方案很重要。