Есть ли любой способ уничтожить setInterval цикл через кнопку Onclick

Так, я заставил бесконечный цикл работать в этой функции с помощью 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.

12
задан JSuar 9 March 2015 в 15:16
поделиться

3 ответа

setInterval возвращает дескриптор, вам нужен этот дескриптор, чтобы вы могли очистите его

проще всего, создайте переменную для дескриптора в своей html-голове, а затем в своем 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

22
ответ дан 2 December 2019 в 06:08
поделиться

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;
   }
}
4
ответ дан 2 December 2019 в 06:08
поделиться

Пусть 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)
   }
}

}

-1
ответ дан 2 December 2019 в 06:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: