У меня такая ситуация. Это что то типо опросника
При нажатии на кнопку, у меня вызывается функция questionGeneration(), в которой есть функция timer(), которая запускает setInterval, которая уменьшает innerHTML на 1, каждую секунду
Когда innerHTML станет 0, то вызывается функция resultFalse(), но функция resultFalse() может быть вызвана пользователем заранее, если он даст не верный ответ
Разумеется я не могу поставить завершение таймера просто так, ведь он находится в функции. Как мне сделать завершение setInterval, при вызове функции resultFalse(), ведь имя setInterval находится в функции timer()
Приклеплю код, хотя наверное он мало что даст
function timer() {
const checkTimer = document.querySelector("#checkTimer");
function restOfTime() {
if (Number(checkTimer.innerHTML == 0)) {
checkTimer.parentElement.innerHTML = `<span style="color: #a8323e">Время закончилось</span>`
clearTimeout(timeForQuestion)
resultFalse(state);
} else {
checkTimer.innerHTML = checkTimer.innerHTML - 1;
}
}
let timeForQuestion = setInterval(restOfTime, 1000)
}
function questionGeneration(elem) {
fullEnable(document.querySelector(".timer__window"))
document.querySelector(".timer__window").innerHTML = `<h1>Оставшееся время 0:<span id="checkTimer">45</span></h1>`
let objectQuestion =
elem.questions[Math.floor(Math.random() * elem.questions.length)];
if (questionArray.indexOf(objectQuestion.id) < 0) {
questionArray.push(objectQuestion.id);
questionWindow.innerHTML = objectQuestion.question;
elem.currentAnswer = objectQuestion;
conditionAnswer();
timer()
return;
} else {
checkPossibleQuestions(elem);
return;
}
}
function resultFalse(elem) {
const falseAnswerCount = document.querySelector("#falseAnswerCount");
falseAnswerCount.innerHTML = Number(falseAnswerCount.innerHTML) + 1;
questionWindow.innerHTML = `<span style="color: #C30052">Ты совершил ошибку</span> <br> ${elem.currentAnswer.currentAnswerQuestion}`;
createQuestionBtn.innerHTML = "Учту. Создать новый вопрос";
fullDisableElem(answerButton);
fullEnable(createQuestionBtn);
changeInput("false");
}