0

入力中にこれに対する答えを見つけましたが、誰かの助けになる場合に備えて、まだ投稿すると思いました

誰もこれを再現できないと確信していますが、一体何なのですか。:)

ユーザー入力の後に AJAX 呼び出しを開始するページがあります。ユーザー入力の後、setTimeout を使用して少し待機し、ユーザーが入力を完了する前に AJAX メソッドを呼び出さないようにします。派手なものはありません。しかし、たまに setTimeout が起動を拒否することがあります。

コードは基本的に次のようになります。

var c = -1;
function userInput(input)
{
    clearTimeout(c);
    c = setTimeout(function(){load(input);}, 100);
}
function load(input)
{
    console.log("load: " + input);
    // ajax stuff.
}

私が言ったように、これは通常うまくいきます。しかし、それが機能しなくなると、「問題」は variable への割り当てのようですc

以下は、IE のデバッグ コンソールの抜粋です。setTimeoutの結果をtoに代入するとc、何も発生しません。結果を別のものに割り当てるか、まったく割り当てない場合、正常に動作します。

>> c = setTimeout("load('test');", 100); 
303789 
>> setTimeout(function(){load('test');}, 100); 
311016 
LOG: load: test
>> clearTimeout(c) 
>> c = setTimeout(function(){load('test');}, 100); 
342177 
>> testtesttest = setTimeout(function(){load('test');}, 100); 
346296 
LOG: load: test 
4

1 に答える 1

0

あなたのページの他の何かが、「c」変数を使用してタイマー ID を保存することも決定しました。新しい setTimeout が発火する機会を得る前に、その他のコードがそれをクリアしています。別の変数を使用するように変更します (そして、その名前をよりわかりやすいものにします)。

于 2013-02-13T20:53:59.987 に答える