2012-10-23 3 views
7

私はAJAXアプリケーションの中に、何かしているのと一緒にユーザーにプロンプ​​トを表示するのに一定の時間がかかると、ツールチップがスムーズに表示されます。また、ユーザーが他の場所をクリックするとタイムアウトをクリアする2つ目の機能もあります。setTimeoutの配列をクリアする

タイムアウト時に複数のツールチップを設定して問題はなくなりましたが、設定は問題ありませんが、ユーザーが移動したときにキャンセルする効率的な方法が見つかりません。

現在、私のコードは、この

var tuttimer = new Array(); 

function showtooltip(uniqueid, delay){ 
    tuttimer[uniqueid] = setTimeout(function(){ 
     //Create tooltip code here 
    },delay); 
} 

function clearTuttimer(){ 
    if(typeof tuttimer != 'undefined'){ 
     for (var i = 0; i < tuttimer.length; i++) { 
      clearTimeout(tuttimer[i]); 
     } 
    } 
} 

のでtuttimer配列は、ページの読み込み時に作成され、ユーザーが行うたび、その後showtooltip()機能を表示するツールチップを小文字と何かが呼ばれ、独特与えているように見えますIDと遅延時間。

しかし、ユーザが別の場所に移動した場合は、clearTuttimer()が呼び出され、配列が存在するかどうかが確認され、ループスルーされて個々のタイムアウトがクリアされます。

ただし、これは機能しません。うまくいけば、誰かが正しい方向に私を指すことができます。どうもありがとう。

答えて

12

arrayを使用する場合は、Array.pushメソッドを使用してください。

var tuttimer = []; 

function showtooltip(delay){ 
    tuttimer.push(setTimeout(function(){ 
     //Create tooltip code here 
    },delay)); 
} 

function clearTuttimer(){ 
    for (var i = 0; i < tuttimer.length; i++) { 
     clearTimeout(tuttimer[i]); 
    } 
} 

uniqueidを使用する場合は、配列の代わりにオブジェクトを使用します。

var tuttimer = {}; 

function showtooltip(uniqueid, delay){ 
    tuttimer[uniqueid] = setTimeout(function(){ 
     //Create tooltip code here 
    },delay); 
} 

function clearTuttimer(){ 
    for (var k in tuttimer) { 
     clearTimeout(tuttimer[k]); 
    } 
} 
+0

グレートする

function showtooltip(uniqueid, delay){ tuttimer[uniqueid] = setTimeout(function(){ //Create tooltip code here },delay); } 

を変更しました。 –

0

いつものように質問を入力すると、私の方法のエラーが表示されました。

問題は私が配列のキーワードをあらかじめ定義された値に設定してからループしたときに数値キーを探していることが原因です。これを克服するために、私は私の答えよりも、きれいだ

function showtooltip(uniqueid, delay){ 
    tuttimer.push(setTimeout(function(){ 
     //Create tooltip code here 
    },delay)); 
}