2014-05-02 174 views
0
<!DOCTYPE html> 
<html lang="en"> 
<head> 
<title>Lab 10</title> 

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script> 
</head> 
<body style="background-color:lightgreen;"> 

    <input type="button" id="btnSetInterval" value="log every 3 seconds" ><br /> 
    <input type="button" id="btnCancelSetInterval" value="cancel the logging every 3 seconds"><br /> 
    <input type="button" id="btnSetTimeout" value="create an event to run 3 seconds from now" /><br /> 

    <input type="button" id="btnCancelSetTimeout" value="cancel the event that is supposed to run 3 seconds from now" />  



<script type="text/javascript"> 

$(document).ready(function() { 
    var intervalID; 

    var timeoutID; 

    function setIntervalCounter() { 
     var intervalID = setInterval(function() { 
     console.log("Hello World"); 
     }, 3000) 
     } 

    function stopIntervalCounter() { 
     clearInterval(intervalID); 
     }; 
    $("#btnSetInterval").click(setIntervalCounter); 
    $("#btnCancelSetInterval").click(stopIntervalCounter); 

});  

</script> 

</body> 

//当我按下第一个按钮时,计数器开始,但我无法停止计数器。 //我希望这是添加评论的正确方式,有时我在视图中丢失我的代码 //我知道这个问题被多次询问,并且我尝试了所有解决方案。 :( 为什么我的clearInterval不起作用?

+0

要创建一个新的局部变量'intervalID'而不是使用前一个。从函数'setIntervalCounter'删除var – nmoliveira

回答

2

你重新声明的intervalID变量,它的作用范围是setIntervalCounter 。()函数删除了var这样的:

function setIntervalCounter() { 
     intervalID = setInterval(function() { 
     console.log("Hello World"); 
     }, 3000) 
     } 
+0

:(谢谢,我在错误的地方寻找错误,现在效果很好。:) –

2

从那里您设置的时间间隔行删除单词var,这是做一个新的局部变量,而不是使用全局之一。

+0

谢谢,我在错误的地方寻找错误。你们两个都很快回答,我很感激。 –

+0

没问题 - 很高兴帮助:) – Archer

0
var intervalID = setInterval(function() { 
    console.log("Hello World"); 
    }, 3000) 
    } 

intervalID被定义为函数setIntervalCounter的局部变量

0123。

因此,您应该在intervalID之前删除“var”,因为intervalID已被声明为全局变量。

0

我怀疑这是因为您在setIntervalCounter()函数内定义的区间ID仅限于该函数的作用域。

如果您在函数中使用'var'关键字在JavaScript中定义变量,则该变量将仅限于该函数的范围 - 意味着您无法从函数外部访问该变量。

您的“stopIntervalCounter()”方法针对全局'intervalID'变量(您在document.ready的第一行中定义的变量)进行操作,这就是您的间隔未被清除的原因。

尝试从setIntervalCounter方法中移除var - 这应该意味着它会将值分配给正确的intervalID实例。

1
function setIntervalCounter() { 
    intervalID = setInterval(function() { 
    console.log("Hello World"); 
    }, 3000) 
    } 

这是正确的