2014-05-02 214 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) 
    } 

這是正確的