Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如果在没有警报的情况下使用Jquery setTimeout,则该设置不起作用_Javascript_Jquery - Fatal编程技术网

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

Javascript 如果在没有警报的情况下使用Jquery setTimeout,则该设置不起作用,javascript,jquery,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'

我正在实现这个代码

$('.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>");
    }
}

单击后,tds应突出显示,3秒钟后,应加载下一个问题,但这不会发生;3秒钟后,加载下一个问题,但背景不会改变。如果我在checkanswer中提醒了什么,代码就会工作。你知道我该怎么做吗?

如果你想使用参数,执行to的部分必须包装在匿名函数中。否则,它在setTimeout中不工作

如下面的注释所述,您甚至可以在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(question, 3000);

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

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

编辑:

如果您只有一个不带参数的函数调用,它将如下所示:

setTimeout("foo()", 3000);


旁注:setTimeout不起作用的原因是,它在3000毫秒后调用第一个参数。之前调用showquestionx+1,0时,它将返回undefined没有返回,setTimeout将在3000毫秒后尝试调用undefined。正如旁注一样,您仍然可以在不使用任何包装器的情况下将参数传递给回调函数:setTimeoutshowquestion,3000,x+1,0;
setTimeout(function(){ showquestion(x+1, 0);}, 3000);
setTimeout("foo()", 3000);
setTimeout(foo, 3000);