Вы ничего не делаете, чтобы заблокировать последующие звонки.block
- это локальная переменная внутри foo
, поэтому для каждого вызова foo
.
по-разному. Вместо этого вы должны иметь block
снаружи foo
:
var myVar;
var block = false;
function foo(){
if(!block){
block = true;
myVar = setTimeout(checkAgain, 5000);
}
function checkAgain(){
console.log("hello");
block = false;
}
}
document.getElementById("btn").addEventListener("click", foo);
<input type="button" id="btn" value="Click me">
Это также означает, что checkAgain
не нужно создавать заново для каждого вызова foo
, так как ему не нужно ничего локального для foo
больше:
var myVar;
var block = false;
function foo(){
if(!block){
block = true;
myVar = setTimeout(checkAgain, 5000);
}
}
function checkAgain(){
console.log("hello");
block = false;
}
document.getElementById("btn").addEventListener("click", foo);
<input type="button" id="btn" value="Click me">
(Я предполагаю, что все это находится в функции или модуле определения объема, поэтому это не глобальные значения.)
Тем не менее, кнопка останется активной, создавая впечатление, что пользователь может нажать на нее.Вместо этого вы можете подумать о том, чтобы foo
мог отключить и снова включить кнопку.