2个问题,首先我有这个代码:
function Question(container, question_list, chosenAnswer) {
this.container = container.empty();
this.question_list = question_list;
if(question_list.length == 1) {
container.append('<div class="answer">' + question_list[0] + '</div>');
} else if (question_list.length == 2) {
for(var i=0;i<question_list.length;i++){
container.append('<div class="two_q'+(i+1)+'">' + question_list[i] + '</div>');
}
addClickOn(container, chosenAnswer);
} else {
for(var i=0;i<question_list.length;i++){
container.append('<div class="four_q'+(i+1)+'">' + question_list[i] + '</div>');
}
addClickOn(container, chosenAnswer);
}
}
function addClickOn(container, chosenAnswer)
{
this.container = container;
$(container.children()).on('click', function() {
selected = $(this);
chosenAnswer= $(this).index();
selected.siblings().fadeOut();
selected.animate({
width: container.width(),
height: container.height()
});
selected.fadeOut();
});
}
var question_list1 = ["Question 1", "Question 2", "Question 3", "Question 4"];
var question_list2 = ["Statement1", "Statement2"];
var answer = ["Answer"];
var chosenAnswer;
new Question($('div.question_container'), question_list2);
console.log(chosenAnswer);
为什么在控制台日志中选择了未定义的答案?我没有定义它,但是我已经通过函数直到它在click事件上设置为止。
当单击其中一个框并且动画结束时,我想返回此selectedAnswer并使用新数组重复Question函数。我该怎么做呢?
谢谢,
瑞克
答案 0 :(得分:1)
JavaScript是按值调用语言。您不能像调用C ++ &foo
引用参数一样修改调用上下文中变量的值。
如果您将“selectedAnswer”作为对象,则该函数可以使用对作为参数传入的对象的引用来修改对象内容。很难确切地说明如何修复你的代码,因为它非常简单。
您在“addClickOn()”中使用this
也不正确。同样,很难说代码应该做什么,但是由于调用函数的方式,该函数中的this
将不会引用任何有用的东西。