2012-01-22 21 views
1

いつものように、誰かがこのコードで私を少し助けてくれたら大変感謝しています。javaScriptでsetIntervalを使用する

は、私は次のコード行を持っている:

var count = 0; 
var limit = 2000; 
function liveCount(){ 
    var increment = count + 10; 
    count = increment; 
    if(count <= limit){ 
     document.getElementById('showCount').textContent=count; 
    }else{ 
     clearInterval(); 
    } 
} 
var counter = setInterval('liveCount()', 10); 

何このコードがないことだろうクロノメーターとしてXに0からカウンターをシミュレートしています。 スタンドアローンで使用すると完璧に動作し、カウントを開始し、限界に達するまでカウントを10ミリ秒間隔で更新してから停止します。
これまでのところとても良いです。
私の問題は、 "countとlimit"変数の値を提供する別の関数の中にこのコードをネストすると、 "liveCount()"が定義されていないというエラーが表示され、 "setInterval()"のパラメータに設定します。

私は考えることができるすべてを試して、私はそれを働かせることができません。
アイデアは何ですか?

ありがとうございます。

+1

'関数の中にコードを入れ子にする'の例を挙げてください。 – Joe

+0

あなたは 'clearInterval'にハンドルを渡していません。 –

+0

ネスト・コードは、整数を取り出す単純な関数です。これは、私がlimit変数の値として使用するものです。 他には何も本当にありません。 – jnkrois

答えて

1

あなたはそれを書いてきたように、liveCountは、グローバルwindowオブジェクトのプロパティでなければなりません。このコードを関数内に置くと、liveCountがその関数にローカルとして定義されます。つまり、window.liveCountは存在しません。

を実行しないでください。実行するコードはsetIntervalです。その代わり、は次のように(何も引用符が存在しないことに注意してください)、それを関数への参照を与える:

var counter = setInterval(liveCount, 10); 

全例:

function someOtherFunc(limit) { 
    var count = 0; 
    function liveCount() { 
     var increment = count + 10; 
     count = increment; 
     if (count <= limit) { 
      document.getElementById('showCount').textContent = count; 
     } else{ 
      clearInterval(); 
     } 
    } 
    var counter = setInterval(liveCount, 10); 
} 
あなたはおそらくも counter(または何かを返したい

そのように)、あなたは確かなコードを表示していません。

+0

ありがとうございました。私は範囲に問題があると考えましたが、それは私を逃れました。おかげさまで – jnkrois

0

あなたの呼び出しをクロージャ内に入れます。

var counter = setInterval(function() { 
    liveCount(); 
}, 10); 

例:http://jsfiddle.net/MattLo/HATmY/

+0

ありがとうございました – jnkrois

+0

問題はありませんjnkrois! ^^ –

1

はたぶん、これはあなたが探しているものです...

function liveCount(count, limit){ 
    var increment = count + 10; 
    count = increment; 
    if(count <= limit){ 
     document.getElementById('showCount').textContent=count; 
    }else{ 
     clearInterval(counter); 
    } 
} 

function wrapper() { 
    // calculate count and limit 
    count = 0; 
    limit = 2000; 
    liveCount(count, limit); 
} 

var counter = setInterval(wrapper, 10); 
+0

ありがとうございました – jnkrois

関連する問題