Так, я заставил бесконечный цикл работать в этой функции с помощью setInterval присоединенный к onClick. Проблема, я не могу остановить ее с помощью clearInterval в onClick. Я думаю, что это вызвано тем, что, когда я присоединяю 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.
setInterval возвращает дескриптор, вам нужен этот дескриптор, чтобы вы могли очистите его
проще всего, создайте переменную для дескриптора в своей html-голове, а затем в своем onclick используйте var
// in the head
var intervalHandle = null;
// in the onclick to set
intervalHandle = setInterval(....
// in the onclick to clear
clearInterval(intervalHandle);
clearInterval
применяется к возвращаемому значению setInterval
, например:
var interval = null;
theSecondButton.onclick = function() {
if (interval === null) {
interval = setInterval(generation, 1000);
}
}
theThirdButton.onclick = function () {
if (interval !== null) {
clearInterval(interval);
interval = null;
}
}
Пусть generation();
вызывает setTimeout
на себя вместо setInterval
. Таким образом, вы можете использовать немного логики в функции, чтобы предотвратить выполнение setTimeout
довольно легко.
var genTimer
var stopGen = 0
function generation() {
clearTimeout(genTimer) ///stop additional clicks from initiating more timers
. . .
if(!stopGen) {
genTimer = setTimeout(function(){generation()},1000)
}
}
}