2

私の自己呼び出しjquery関数が仕事をしたかどうかを確認しようとしていますが、結果は自己呼び出しごとに乗算され続けます。

HTML

<span id="checkit"></span>

Javascript

$(function(){
    callme();
});

function callme(){
    $('#checkit').append("callme loaded<br />");
    setInterval("callme()", 5000);
}

通常、コードの結果は次のとおりです。

オンロード。

callme loaded

5秒後

callme loaded <from previous
callme loaded

さらに5秒後

callme loaded <from previous
callme loaded <from previous
callme loaded
callme loaded
callme loaded
callme loaded

くだらない説明ですみません。なぜこのようなことが起こったのか、私は真剣に考えてきました。誰かが私が間違っていたこと、またはこれに対する解決策を説明できれば. 助けてください - この問題は何日も私を悩ませ続けました。

4

3 に答える 3

3

を呼び出すたびにcallme、再度呼び出す新しい間隔を作成していますcallme。の代わりにclearIntervalまたは を使用して、前の間隔をクリアできます。setTimeoutsetInterval

function callme(){
    $('#checkit').append("callme loaded<br />");
    setTimeout(callme, 5000);
}
于 2011-10-20T02:39:32.947 に答える
0

#checkit 要素が作成されているかどうかを確認する必要があります。そして、間隔 (何度も続く) の代わりにタイムアウト (1 回だけ呼び出す) を使用する必要があります。

function callme(){
   $('#checkit').append("callme loaded<br />");
   if (!document.getElementById('checkit'))
      setTimeout(callme, 5000);
}

学習用リファレンス: window.setTimeout

于 2011-10-20T02:40:03.990 に答える
0

setInterval は setTimeout ではありません。間隔をクリアしていないため、それらは複合しています。

于 2011-10-20T02:40:24.200 に答える