使用函数使我的代码无法正常工作?

时间:2018-09-04 17:17:59

标签: javascript html

我附上了之前代码和之后代码。 该代码是:如果答案正确,则会弹出一个div提示正确第二秒钟;如果答案不正确,则会弹出一个div提示错误第二秒钟。

我决定通过使用函数来隐藏和显示div并使用变量id传递div id来改进代码,并在需要隐藏或取消隐藏div时调用它,就像我在代码的整个过程中一样不断隐藏和隐藏div。

但是由于某些原因,该函数在所有其他div上都起作用,因此在此新代码中接受。分数变量增加,并且分数的内部html只更新“错误”和“正确”的div,然后一秒钟后隐藏。

之前,

function hideCorrectBox(){
document.getElementById("correct").style.display='none'; 
}
function hideWrongBox(){
document.getElementById("wrong").style.display='none'; 
}
document.getElementById("box1").onclick=function(){
if(areWePlaying==true){
if(document.getElementById("box1").innerHTML==answer){
    document.getElementById("correct").style.display='initial';
    setTimeout(hideCorrectBox,1000);
    score= score+1;
    document.getElementById("scoreValue").innerHTML= score;
    newQuestion();
}
else {document.getElementById("wrong").style.display='initial';
     setTimeout(hideWrongBox,1000);}
}}

之后

function show(Id){
   document.getElementById(Id).style.display="initial";
}
function hide(Id){
   document.getElementById(Id).style.display="none";
}
document.getElementById("box1").onclick=function(){
if(areWePlaying==true){
if(document.getElementById("box1").innerHTML==answer){
    show("correct");
    setTimeout(hide("correct"),1000);
    score= score+1;
    document.getElementById("scoreValue").innerHTML= score;
    newQuestion();
}
else {show("wrong");
     setTimeout(hide("wrong"),1000);}
}}

1 个答案:

答案 0 :(得分:2)

问题在于以下几行:

setTimeout(hide("correct"),1000);

您必须将函数 引用 传递给setTimeout(),但是您正在传递函数 调用 >。结果是hide()被立即调用,而该调用的返回值就是传递给setTimeout()的值。由于hide没有返回值,因此正在传递undefined

将行更改为:

setTimeout(function(){hide("correct")},1000);

这样您就可以传递匿名函数 声明 ,该函数本身将调用hide