2012-10-23 8 views
7

Ok, więc mam funkcję w mojej aplikacji AJAX, która przykleja etykietkę z podpisem w rogu po pewnym czasie, aby pomóc użytkownikowi w zasygnalizowaniu tego, co robią. Istnieje również druga funkcja, która usuwa limit czasu, jeśli użytkownik kliknie gdzieś indziej, ponieważ ta etykieta nie będzie już istotna.Wyczyść tablicę setTimeout's

Zaczynam mieć problem z ustawianiem wielu podpowiedzi na timeoutach, ustawienie ich jest w porządku, ale nie mogę znaleźć skutecznego sposobu na ich anulowanie, jeśli użytkownik przejdzie dalej.

Obecnie mój kod wygląda następująco

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]); 
     } 
    } 
} 

Więc tablica tuttimer jest tworzony przy obciążeniu strony, a następnie, gdy użytkownik robi coś, co przypadku podpowiedź, aby wyświetlić funkcję showtooltip() nazywa i jest podany unikalny id i czas opóźnienia.

Ale jeśli użytkownik przejdzie do czegoś innego, wywołuje funkcję clearTuttimer(), która sprawdza, czy tablica istnieje, a następnie wykonuje pętle i czyści każdy indywidualny limit czasu.

Jednak to nie działa. Mam nadzieję, że ktoś wskaże mi właściwy kierunek. Wielkie dzięki.

Odpowiedz

12

Jeśli korzystasz z tablicy, użyj metody 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]); 
    } 
} 

Jeśli chcesz użyć uniqueid, użyj obiektu zamiast tablicy.

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

Wielki to nawet czystsze niż moja odpowiedź. –

0

Jak zwykle wpisanie pytania spowodowało, że zobaczyłem błąd moich działań.

Problem polega na tym, że ustawiam słowo kluczowe array na pewną predefiniowaną wartość, a kiedy zapętrę, szukam kluczy numerycznych. Aby temu zaradzić Mam zmodyfikowany

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

być

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