2012-10-23 7 views
7

Ok, also ich habe eine Funktion in meiner AJAX-Anwendung, die eine Tooltip in der Ecke nach einer gewissen Zeit hält, um den Benutzer mit dem, was sie tun, zu helfen. Es gibt auch eine zweite Funktion, die das Timeout löscht, wenn der Benutzer irgendwo anders klickt, da dieser Tooltip nicht mehr relevant ist.Klare Array von setTimeout

Ich habe jetzt ein Problem mit dem Setzen mehrerer Tooltips auf Timeouts, Einstellung ist in Ordnung, aber ich kann keine effiziente Möglichkeit finden, sie abzubrechen, wenn der Benutzer weitergeht.

Derzeit sieht mein Code wie dieser

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

So ist die tuttimer Array auf Seite Last erzeugt wird, und dann, wenn ein Benutzer etwas tut, das ein Tooltip Fall würde die showtooltip() Funktion zum Anzeigen aufgerufen und eine einzigartige gegeben ID und eine Verzögerungszeit.

Aber wenn der Benutzer zu etwas anderem weitergehen würde, ruft er die Funktion clearTuttimer() auf, die überprüft, ob das Array existiert und dann jedes einzelne Timeout durchläuft und löscht.

Dies funktioniert jedoch nicht. Hoffentlich kann mir jemand in die richtige Richtung zeigen. Danke vielmals.

Antwort

12

Wenn Sie ein Array verwenden, verwenden Sie die Methode 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]); 
    } 
} 

Wenn Sie uniqueid verwenden möchten, dann ein Objekt anstelle von 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

Große, das ist sogar sauberer als meine Antwort. –

0

Wie üblich hat nur die Eingabe der Frage mich den Fehler meiner Wege gesehen.

Das Problem kommt von mir Einstellung der Array-Schlüsselwort auf einen vordefinierten Wert und dann, wenn ich Schleife, ich suche nach numerischen Schlüsseln. Um dies zu überwinden Ich habe

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

sein

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