2012-10-23 15 views
7

Ok, quindi ho una funzione nella mia applicazione AJAX che attacca un suggerimento nell'angolo dopo un certo periodo di tempo per aiutare l'utente e ciò che sta facendo. C'è anche una seconda funzione che cancella il timeout se l'utente fa clic da qualche altra parte in quanto quel tooltip non sarà più rilevante.Cancella array di setTimeout's

Sto iniziando ad avere un problema ora con l'impostazione di più suggerimenti sui timeout, impostarli va bene, ma non riesco a trovare un modo efficace per cancellarli se l'utente si sposta.

Attualmente il mio codice è simile

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

Così l'array tuttimer viene creato il caricamento della pagina e quindi ogni volta che un utente fa qualcosa che caso, un suggerimento per visualizzare la funzione showtooltip() viene chiamato e viene dato un unico id e un tempo di ritardo.

Ma se l'utente dovesse passare a qualcos'altro, chiama la funzione clearTuttimer() che controlla se l'array esiste e quindi scorre e cancella ogni singolo timeout.

Tuttavia questo non funziona. Spero che qualcuno possa indicarmi la giusta direzione. Grazie molto.

risposta

12

Se si utilizza la matrice, utilizzare il metodo 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]); 
    } 
} 

Se si desidera utilizzare uniqueid, quindi utilizzare un oggetto invece di array.

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

Grande che è ancora più pulita di quanto la mia risposta. –

0

Come al solito solo digitando la domanda mi ha fatto vedere l'errore dei miei modi.

Il problema viene da me impostando la parola chiave array su un valore predefinito e quindi quando eseguo il ciclo cerco tasti numerici. Per superare questo ho modificato

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

essere

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