7 votes

Effacer le tableau des setTimeout.

D'accord, j'ai une fonction dans mon application AJAX qui place une infobulle dans un coin après un certain laps de temps pour aider l'utilisateur à comprendre ce qu'il fait. Il y a aussi une deuxième fonction qui annule le délai si l'utilisateur clique ailleurs, car cette info-bulle ne sera plus pertinente.

J'ai maintenant un problème avec la définition de plusieurs info-bulles sur des délais, les définir est facile mais je ne trouve pas un moyen efficace de les annuler si l'utilisateur passe à autre chose.

Actuellement, mon code ressemble à ceci

var tuttimer = new Array();

function showtooltip(uniqueid, delay){
    tuttimer[uniqueid] = setTimeout(function(){
        //Code de création de l'infobulle ici
    },delay);
}

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

Ainsi, le tableau tuttimer est créé lors du chargement de la page et chaque fois qu'un utilisateur fait quelque chose qui déclenche l'affichage d'une info-bulle, la fonction showtooltip() est appelée et reçoit un identifiant unique et un délai.

Mais si l'utilisateur passe à autre chose, la fonction clearTuttimer() est appelée pour vérifier si le tableau existe puis boucle et annule chaque délai individuellement.

Cependant, cela ne fonctionne pas. J'espère que quelqu'un pourra me guider dans la bonne direction. Merci beaucoup.

15voto

xdazz Points 85907

Si vous utilisez un tableau, alors utilisez la méthode 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]);
    }
}

Si vous voulez utiliser uniqueid, alors utilisez un objet à la place d'un tableau.

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

0voto

Jacob Tomlinson Points 960

Comme d'habitude, le simple fait de poser la question m'a fait réaliser mon erreur.

Le problème vient du fait que j'ai défini le mot-clé array sur une valeur prédéfinie, puis lorsque je fais une boucle, je recherche des clés numériques. Pour surmonter cela, j'ai modifié

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

pour être

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X