如果在没有警报的情况下使用,则Jquery setTimeout不起作用

时间:2016-07-21 09:04:20

标签: javascript jquery

我正在实施此代码。

$('.mcqtd').click(function(){
var choice = this.id;   
    checkanswer(choice,questions[x].correctAnswer);
    window.setTimeout(showquestion(x+1,0),3000); // 1 seconds
});

}

function checkanswer(answer,original){
    if (answer=='choice'+original){
        $('#choice'+original).css('backgroundColor', '#DD792E');
        $('#choice'+original).append("<span class='padding10 mcqsymbol'><img src='images/right_icon.png' /></span>");
    } else {
        $('#'+answer).css('backgroundColor', '#AFA689');
        $('#'+answer).append("<span class='padding10 mcqsymbol'><img src='images/wrong_icon.png' /></span>");
        $('#choice'+original).css('backgroundColor', '#DD792E');
        $('#choice'+original).append("<span class='padding10 mcqsymbol'><img src='images/right_icon.png' /></span>");
    }
}

Onclicktds应该突出显示,3秒后,应该加载下一个问题,但这不会发生,3秒后加载下一个问题,但背景不是改变。如果我在checkanswer()内警告某些内容,则代码可以正常运行。任何想法我该怎么办?

3 个答案:

答案 0 :(得分:6)

如果要使用参数,必须将执行部件包装在匿名函数中。否则它在setTimeout中无效。

setTimeout(function() {
    showquestion(x + 1, 0);
}, 3000);

如下面的评论中提到的A.Wolff,您甚至可以通过扩展时间背后的参数将参数传递给setTimeout中的被调用函数。

// note there are no '()' behind the function name
setTimeout(showquestion, 3000, x + 1, 0);

如果要调用不带参数的函数,则可以省略包装函数和其他参数。

// note there are no '()' behind the function name
setTimeout(functionWithoutParameter, 3000);

答案 1 :(得分:1)

您所做的是直接调用函数并将其返回值传递给setTimeout。当你打算使用这个参数时,你将不得不使用匿名函数,例如:

setTimeout(function(){ showquestion(x+1, 0);}, 3000);

修改

如果你只有一个没有参数的函数调用,它看起来像:

setTimeout("foo()", 3000);

setTimeout(foo, 3000);

答案 2 :(得分:0)

在setTimeout方法中将其称为无法正常工作。

  setTimeout(question, 3000);

   function question() {
     showquestion(x + 1, 0)
   }