остановить выполнение функции таймера при отправке формы - PullRequest
0 голосов
/ 05 ноября 2018

У меня есть программа онлайн-викторины, где пользователь должен заполнить ее в течение определенного периода времени. Когда у пользователя заканчивается время, я показываю предупреждение о том, что ваше время истекло, и он перенаправляется на страницу результатов. Я получаю такое же предупреждение, когда пользователь завершает тест до истечения времени и находится на странице результатов. Я изменил код следующим образом, но он не работает. Я вызываю функцию initTimer (1,1) на странице, запрашиваемой ajax, с именем questions.php.

В index.php

function initTimer(periodInSeconds, status) {
  if (status == 0) {
    return false;
  }
  var end = Date.now() + periodInSeconds * 1000 * 60;
  var x = window.setInterval(function() {
    var timeLeft = Math.floor((end - Date.now()) / 1000);

    if (timeLeft < 0) {
      clearInterval(x);
      alert("Time's Up!");
      timeExpired = true;
      var completed = 1;
      $.ajax({
        type: "POST",
        url: "success.php",
        data: {
          'userID': <?php echo $_SESSION['userID'];?>
        },
        success: function(hasil) {
          $('.response_div').html(hasil);
        }
      });
    }

    $(document).find('#timerspan').html('00:' + (timeLeft < 10 ? '0' + timeLeft : timeLeft));
  }, 200);
}
//when user submits the form before time expires

$(document).on('submit', '.form_choice', function() {
  initTimer(1, 0)
  $.ajax({
    type: "POST",
    url: "result.php",
    data: data,
    success: function(hasil) {
      $('.response_div').html(hasil);
    }
  })
});

Я не хочу, чтобы функция init () выполнялась, когда пользователь отправляет форму до истечения времени. Пожалуйста, помогите мне

1 Ответ

0 голосов
/ 05 ноября 2018

Объявите переменную, удерживающую таймер вне функции initTimer, затем вы можете очистить таймер, вызвав его с помощью status = 0

var timer;

function initTimer(periodInSeconds, status) {
  if (status == 0) {
    clearInterval(timer);
    return;
  }
  var end = Date.now() + periodInSeconds * 1000 * 60;
  timer = window.setInterval(function() {
    var timeLeft = Math.floor((end - Date.now()) / 1000);

    if (timeLeft < 0) {
      clearInterval(timer);
      alert("Time's Up!");
      timeExpired = true;
      var completed = 1;
      $.ajax({
        type: "POST",
        url: "success.php",
        data: {
          'userID': <?php echo $_SESSION['userID'];?>
        },
        success: function(hasil) {
          $('.response_div').html(hasil);
        }
      });
    }

    $(document).find('#timerspan').html('00:' + (timeLeft < 10 ? '0' + timeLeft : timeLeft));
  }, 200);
}
//when user submits the form before time expires

$(document).on('submit', '.form_choice', function() {
  initTimer(1, 0)
  $.ajax({
    type: "POST",
    url: "result.php",
    data: data,
    success: function(hasil) {
      $('.response_div').html(hasil);
    }
  })
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...