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

Jquery setTimeout not working if used without alert

本文关键字:Jquery setTimeout 不起作用 情况下 有警 如果      更新时间:2023-09-26

我正在实现这段代码。

$('.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()中提醒某个东西,代码就会工作。有什么想法吗?我该怎么办?

如果要使用parametes,执行部分必须封装在匿名函数中。否则,它在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);

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

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

编辑:

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

setTimeout("foo()", 3000);

setTimeout(foo, 3000);

在setTimeout方法中肮脏地调用它不起作用。

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