2016-09-26 33 views
0

我有被激活一次startnew按钮被按下计数器:JavaScript计数器的第二个按钮后加快单击

<button id="startnew" onclick="counter()">Start new Game</button> 

var i = 0; 
function counter() { 
    var execution = setInterval(function(){ 
    active() 
    }, 1000); 
    function active() { 
    i++; 
    document.getElementById("timer").innerHTML = i; 
    } 
} 

问题是当我在startnew按钮,点击第二次,在计时器开始计时加速作为内部变量保持不变。 我已经尝试在代码的不同部分添加额外的if子句,它将检查按钮是否已被点击,但目前为止没有成功。

第二次点击同一个按钮后,如何重置内部变量?

+4

你每次执行'counter'函数时创建一个新的'setInterval'。这是加速你的'我'的罪魁祸首。 – choz

+0

'function counter(){var i = 0; clearInterval(执行);在计数器函数内声明变量'i'。也就是 – Sasikumar

+0

所以,正如choz所说的是正确的,如果你想开始一个新游戏,你应该检查你的实例是否还在工作,如果是这样,将其设置为'null'并创建一个新实例。编辑:还记得设置你的'我'回到'0'。 – Matthew

回答

0

您每次单击按钮时都会创建一个新的setInterval

致电clearInterval(execution)之前setInterval并使var执行全局。同时在函数计数器中声明你的变量i。

var execution; 
 

 
function counter() { 
 
    var i = 0; 
 
    clearInterval(execution); 
 

 
    execution = setInterval(function() { 
 
    active() 
 
    }, 1000); 
 

 
    function active() { 
 
    i++; 
 
    document.getElementById("timer").innerHTML = i; 
 
    } 
 
}
<button id="startnew" onclick="counter()">Start new Game</button> 
 
<br> 
 
<span id="timer"></span>

0

我希望我理解你的要求......

使变量execution在全球范围

var i = 0; 
 
var execution; 
 

 
function counter() { 
 
    if (i === 0) { 
 
    execution = setInterval(function() { 
 
     active() 
 
    }, 1000); 
 
    } else { 
 
    clearInterval(execution); 
 
    i = 0; 
 
    document.getElementById("timer").innerHTML = ''; 
 
    } 
 

 
    function active() { 
 

 
    i++; 
 
    document.getElementById("timer").innerHTML = i; 
 

 
    } 
 
}
<button id="startnew" onclick="counter()">Start new Game</button> 
 

 
<span id='timer'></span>

相关问题