背景
我正在创建一个用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(和编程)的新手,并怀疑问题在于对返回值如何工作的一些误解?
谢谢!
答案 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的变量递增并可供所有函数使用,这对解决方案很重要。