如何在函数外部设置变量索引并在函数完成后执行

时间:2012-03-05 13:19:59

标签: jquery

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);
  1. 为什么在控制台日志中选择了未定义的答案?我没有定义它,但是我已经通过函数直到它在click事件上设置为止。

  2. 当单击其中一个框并且动画结束时,我想返回此selectedAnswer并使用新数组重复Question函数。我该怎么做呢?

  3. 谢谢,

    瑞克

1 个答案:

答案 0 :(得分:1)

JavaScript是按值调用语言。您不能像调用C ++ &foo引用参数一样修改调用上下文中变量的值。

如果您将“selectedAnswer”作为对象,则该函数可以使用对作为参数传入的对象的引用来修改对象内容。很难确切地说明如何修复你的代码,因为它非常简单。

您在“addClickOn()”中使用this也不正确。同样,很难说代码应该做什么,但是由于调用函数的方式,该函数中的this将不会引用任何有用的东西。