2016-07-21 8 views
0

私はこのコードを実装しています。アラートなしでJquery setTimeoutが動作しない場合

$('.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()の中に何か警告すると、コードが動作します。私は何をすべきですか?

答えて

6

パラメタを使用する場合は、to実行部分を無名関数にラップする必要があります。それ以外の場合は、setTimeoutで動作していません。

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

A.Wolffは以下のコメントで述べたように、あなたも時間の後ろにパラメータをexteningによって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); 
+0

サイドノート:setTimeoutが機能しないのは、3000ミリ秒後に最初の引数を呼び出すためです。前にshowquestion(x + 1,0)を呼び出すと、undefined(返りません)が返され、setTimeoutは3000ミリ秒後にundefinedを呼び出そうとします。 – dejakob

+0

あなたは歓迎です、@AliZia! – eisbehr

+1

「setTimeout(showquestion、3000、x + 1,0); https://developer.mozilla.org/en/docs/Web」のように、ラッパーを使用せずにパラメータをコールバック関数に渡すこともできます。/API/WindowTimers/setTimeout –

0

このメソッドをsetTimeoutメソッドで呼び出すと、機能しません。

あなたが直接関数を呼び出すと setTimeoutに経由での戻り値を渡してください何
setTimeout(question, 3000); 

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

。あなたはこれで引数を使用すると、あなたは匿名関数、例えばの利用を行う必要があります。

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

編集:

あなたが唯一の引数なしFunctionCallをを持っている場合、それは見てwoulf以下のような:

setTimeout("foo()", 3000); 

または

setTimeout(foo, 3000); 
関連する問題