2014-09-20 35 views
1

我已經得到了div稱爲"count"現在我想它的值從0遞增到10。這是我如何做:無法停止的js代碼

<script> 
    var i = 0; 
    var refreshId = function() { 
     $('#count').text(i); 
     i++; 
     if (i > 10) { 
      clearInterval(refreshId); 
     } 
    }; 

    $(document).ready(function() { 
     setInterval(refreshId, 500); 
    }); 
</script> 

但計數器不停止。怎麼了?

+3

['clearInterval()'](https://developer.mozilla.org/en-US/docs/Web/API/ WindowTimers.clearInterval)需要一個'intervalId','setInterval()'提供''return'值,而不是與該間隔綁定的'function'。 – 2014-09-20 13:26:04

回答

5

clearInterval()需要setInterval()函數返回的標識符。

<script> 
    var i = 0; 
    var refreshId; 
    var refreshFunction = function() { 
     $('#count').text(i); 
     i++; 
     if (i > 10) { 
      clearInterval(refreshId); 
     } 
    }; 

    $(document).ready(function() { 
     refreshId = setInterval(refreshFunction, 500); 
    }); 
</script> 
+1

建議使用代碼片段提供解釋(「*您改變了什麼?爲什麼?原始錯誤?*」)。代碼轉儲不一定很容易理解。 – 2014-09-20 13:28:25

+0

@JonathanLonowski你是對的,謝謝! – 2014-09-20 13:44:29

1

試試這個:

作品,當你在控制檯粘貼預期。

var i = 0; 
    var refreshId = function() { 
     $('#count').text(i); 
     i++; 
     console.log(i); 
     if (i > 10) { 
      clearInterval(a); 
     } 
    }; 
    a = setInterval(refreshId, 500); 
0

嗯,我不知道到底發生了什麼事在此代碼(除了你寫的),但單純從觀察它看起來好像refreshID被稱爲後我== 10

1

由於startTime()將運行500mls,請將計數器增加到10內,然後清除間隔。

var counter = 0; 
var tt=setInterval(function(){startTime()},500); 

function startTime() 
{ 
    if(counter == 10) { 
     clearInterval(tt); 
    } else { 
     counter++; 
    } 

    document.getElementById('count').innerHTML = counter; 
} 
0

另一種選擇是使用遞歸setTimeout

var i = 0; 
var refreshFunction = function() { 
    $('#count').text(i); 
    i++; 
    if (i <= 10) { 
     setTimeout(refreshFunction, 500); 
    } 
}; 

$(document).ready(function() { 
    setTimeout(refreshFunction, 500); 
});