为什么我的clearInterval无法正常工作?

时间:2014-05-02 15:05:14

标签: javascript jquery html

<!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>

//当我按下第一个按钮时,计数器启动,但我无法停止计数器。 //我希望这是添加评论的正确方法,有时我会丢失视图中的代码 //我知道这个问题被多次询问,我已经尝试了所有解决方案。 :(    

5 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:2)

您正在重新声明intervalID变量。它的作用域是setIntervalCounter()函数。删除var。像这样:

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

答案 2 :(得分:1)

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

这是正确的

答案 3 :(得分:0)

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

intervalID定义为函数setIntervalCounter的LOCAL变量。

因此,你应该删除&#34; var&#34;在intervalID之前,因为intervalID已经被声明为全局变量。

答案 4 :(得分:0)

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

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

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

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