2012-10-23 49 views
7

好吧,所以我在我的AJAX應用程序中有一個函數,它在一段時間後在角落粘貼工具提示,以幫助提示用戶以及他們正在做什麼。還有第二個功能,如果用戶在其他地方點擊,則會清除超時,因爲該工具提示不再相關。清除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.push方法。如果要使用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

大,它比我的回答更清潔。 –

0

像往常一樣只是輸入的問題已經讓我看到了我的方式的錯誤。

問題來自我設置數組關鍵字爲一些預定義的值,然後當我循環我正在尋找數字鍵。爲了克服這一點,我已經修改了

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

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