12

そのため、onClick にアタッチされた setInterval を使用して、この関数で無限ループが機能するようにしました。問題は、onClick で clearInterval を使用して停止できないことです。これは、clearInterval を onClick にアタッチすると、関数全体ではなく特定の間隔が強制終了されるためだと思います。onClick を介してすべての間隔を強制終了するためにできることはありますか?

これが私の.js ファイルで、私が行っている呼び出しは

input type="button" value="generate" onClick="generation();

input type="button" value="Infinite Loop!" onclick="setInterval('generation()',1000);"

input type="button" value="Reset" onclick="clearInterval(generation(),80;" // This one here is giving me trouble.
4

4 に答える 4

22

setInterval はハンドルを返します。クリアできるようにそのハンドルが必要です

最も簡単なのは、html ヘッドでハンドルの var を作成してから、onclick で var を使用することです。

// in the head
var intervalHandle = null;

// in the onclick to set
intervalHandle = setInterval(....

// in the onclick to clear
clearInterval(intervalHandle);

http://www.w3schools.com/jsref/met_win_clearinterval.asp

于 2010-05-07T18:42:09.863 に答える
4

clearIntervalsetInterval次のように、 の戻り値に適用されます。

var interval = null;
theSecondButton.onclick = function() {
    if (interval === null) {
       interval = setInterval(generation, 1000);
    }
}
theThirdButton.onclick = function () {
   if (interval !== null) {
       clearInterval(interval);
       interval = null;
   }
}
于 2010-05-07T18:41:41.330 に答える
-1

の代わりに自分自身をgeneration();呼び出します。つまり、関数内で少し if ロジックを使用して、関数が非常に簡単に実行されないようにすることができます。setTimeoutsetIntervalsetTimeout

var genTimer
var stopGen = 0

function generation() {
   clearTimeout(genTimer)  ///stop additional clicks from initiating more timers
   . . .
   if(!stopGen) {
       genTimer = setTimeout(function(){generation()},1000)
   }
}

}

于 2010-05-07T18:39:45.467 に答える