1

これが私のコードです:

var t = setTimeout("increment();", 1000 * 3);

var st;

function increment() {
    st = 1;
}

for (i = 0; i < 10; i++) {

    cnt = i;
    var no1 = Math.floor(Math.random() * 101);
    var no2 = Math.floor(Math.random() * 101);

    if ((i % 4) == 0) {
        crct_ans[i] = no1 + no2;
        quest[i] = no1 + " + " + no2;
    }
    else if ((i % 4) == 1) {
        crct_ans[i] = no1 - no2;
        quest[i] = no1 + " - " + no2;
    }
    else if ((i % 4) == 2) {
        crct_ans[i] = no1 * no2;
        quest[i] = no1 + " x " + no2;
    }
    else if ((i % 4) == 3) {
        crct_ans[i] = no1 / no2;
        quest[i] = no1 + " / " + no2;
    }

    ans[i] = prompt(quest[i], "");

    if (st == 1) break;
}​

3秒経過したらforループを止めたい。しかし、これは機能していません。for ループも 3 秒後に実行されます。これどうやってするの?

4

3 に答える 3

3

次のように削除()して引用します。

var t = setTimeout(increment, 3000);
  • 削除()すると、callabck が予期されるのに対し、その関数の実行がすぐに/すぐに無効になりますsetTimeout
  • 引用符を削除するとeval、舞台裏で使用されなくなります。

varところで、次のように単一のキーワードですべての変数を宣言することをお勧めします。

var t = setTimeout(increment, 3000), st;
于 2012-04-19T17:32:17.387 に答える
1

次のようにフォーマットしてみてください。

var t = setTimeout(function(){increment();}, 3000);
于 2012-04-19T17:31:48.733 に答える
1

要件に合っている場合は、経過時間を簡単に確認できます。

例:

var start = new Date();

for(i = 0; i < 10; i++){
    var end = new Date();
    var elapsed = end.getTime() - start.getTime();

    if (elapsed >= 3000)
        break;
}​
于 2012-04-19T17:36:22.910 に答える