Как очистить Timeout, чтобы я мог повторно использовать функцию? - PullRequest
0 голосов
/ 13 марта 2019

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

ЯШ:

var ball = document.getElementById("ball"); 

    function start(){
        console.log("start");
        ball.classList.toggle("shake");
}; 

    ball.addEventListener("click", start);

function newResponse() { 
     var question = document.getElementById("question").value;
     var response = ["..."];

     for (var i = 0; i < question.length; i++) {

     var randomResponse = Math.floor(Math.random() * response.length);
        document.getElementById('quoteDisplay').innerHTML = response[randomResponse];
     }
}

ball.addEventListener("click", newResponse)

Ответы [ 2 ]

0 голосов
/ 13 марта 2019

$('#test').click(function(){

   var timer = setTimeout(function newResponse() { 

        alert('Click answered...');

        clearTimeout(timer);
    },4000)
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input type="button" value="test" id='test'/>

Вы можете сделать это

var timer = setTimeout(function newResponse() { 

        var question = document.getElementById("question").value;

        var response = ["..."];


    for (var i = 0; i < question.length; i++) {       

     var randomResponse = Math.floor(Math.random() * response.length);
            document.getElementById('quoteDisplay').innerHTML = 
            response[randomResponse];
        }

    clearTimeout(timer);
    },4000)
0 голосов
/ 13 марта 2019

Объявите функцию вне тайм-аута, чтобы вы могли ссылаться на нее несколько раз. Затем вызовите функцию setTimeout, присвойте результат переменной, и, если вы хотите очистить тайм-аут, вызовите clearTimeout для этой переменной:

function newResponse() { 
  var question = document.getElementById("question").value;
  var response = ["..."];
  for (var i = 0; i < question.length; i++) {       
    var randomResponse = Math.floor(Math.random() * response.length);
    document.getElementById('quoteDisplay').innerHTML = 
      response[randomResponse];
  }
}
// Set the timeout once:
let timeout = setTimeout(newResponse,4000);
// Clear it:
clearTimeout(timeout);
// Set the timeout again:
timeout = setTimeout(newResponse,4000);
// etc
...