2012-05-03 22 views
2

setInterval()を使用して間隔を設定する関数がありますが、それでもclearInterval()を呼び出した後、私はelse条件がまだ実行されているコンソールで見ることができます。どのようにしてその間隔を適切にクリアすることができますか?このコードでclearIntervalが動作しないのはなぜですか?

function increase(old, step, neu) { 
    var i = 0; 
    var delay2; 

    function countUp() { 
     if (i < 5) { 
      old += step; 
      // console.log("increase") 
      $("#total-price-value").text(old + " dollors"); 
      $("#total-price-value").digits(); 
      i++; 
      delay2 = setInterval(countUp, 80); 
     } else { 
      clearInterval(delay2); 
      console.log(delay2); 
     } 

    } 
    countUp(); 

}​ 

答えて

10

タイムアウトと間隔の違いについて少し混乱しているようです。タイムアウトは一度だけ発生します。間隔が何度も発火する。インターバルを使用している場合は、1回だけ設定したい(たびに設定します)。タイムアウトを使用している場合は、毎回(あなたがやっているように)設定したいと思うかもしれません。

問題を解決するために、あなたはタイムアウトに切り替えるにはどちらかをお勧めします(おそらく最も簡単な;ただ、検索/置換)または一度だけ間隔を設定します。例えば

が、ここで1は5にカウントアップするsetTimeoutを使用する方法である:タイムアウトを使用して

var count = 0; 
function timeoutFired() { 
    count++; 
    if(count < 5) { 
     setTimeout(timeoutFired, 1000); 
    } 
} 
setTimeout(timeoutFired, 1000); 

、我々はカウントからそれを停止するためにクリアする必要はありません。単純にタイムアウトを設定しないと、タイムアウトが再実行されません。あなたが停止する間隔を使用して、定期的に実行しているいくつかのコードをしたい場合は、あなたがclearIntervalを呼び出す必要があり

var count = 0; 
function intervalFired() { 
    count++; 
    if(count >= 5) { 
     clearInterval(interval); 
    } 
} 
var interval = setInterval(intervalFired, 1000); 

:ここ

は1つがsetIntervalを使用する方法です。我々がそれを続行することを望まないたびに、setTimeoutに対して、setIntervalを一度だけ呼び出すことに注意してください。

+2

は、私の男のコードを表示します! – Cheeso

2

どうやら、あなたはsetTimeoutためsetIntervalを間違えています。 setIntervalは、nミリ秒ごとに実行し、setTimeoutは、nミリ秒後に1回だけ実行します。

私はあなたがそうhere's a sample「5までカチカチ」と思ったとします

function increase(old, step, neu) { 
    var i = 0; 

    interval = setInterval(function() { 
     if (i < 5) { 

      //do something at this "tick" 
      console.log(i); 

      i++; 
     } else { 
      //else, stop 
      clearInterval(interval); 
     } 
    },80); 

} 

increase(); 
関連する問題