2009-10-26 9 views
4

J'utilise setInterval pour vérifier si un p (paragraphe html) a une certaine valeur de texte. si elle l'a, je veux effacer l'intervalle d'un flux de code continue. J'utilise ceci dans un plugin jQuery donc si le paragraphe a une valeur de texte tat je veux effacer l'intervalle et ensuite continuer avec une fonction de rappel. donc j'ai essayé quelque chose comme ceci:javascript/jQuery setInterval/clearInterval

var checkTextValue = setInterval(function(){ 
          var textVal = $('p').text(); 
          if(textVal == 'expectedValue'){ 
           clearInterval(checkTextValue); 
           callback(); 
          } 
        },10); 

et la fonction de rappel, il est une simple alerte. Mon problème est que l'alerte est appelée indéfiniment. Comment puis-je écrire mon code pour le faire correctement? Merci.

+0

C'est un vieux problème, mais ... Je ne peux pas repro ce (http://jsfiddle.net/gc97D/), et je ne vois aucune raison pourquoi cela ne fonctionnerait pas. Je pense qu'il doit y avoir autre chose. La façon la plus simple de voir ce qui se passe est de a) supprimer votre callback, b) console.log la valeur de checkTextValue/outside/la fonction, et c) console.log la valeur de checkTextValue/inside/la fonction. Vous voudrez probablement augmenter la minuterie à quelque chose de plus grand que 10, aussi. – Max

Répondre

8

Utilisez setTimeout au lieu de setInterval.

Quelque chose comme:

var checkTextValue = setTimeout(function() { 
    var textVal = $('p').text(); 
    if (textVal == 'expectedValue'){ 
     callback(); 
    } else { 
     setTimeout(arguments.callee, 10); 
    } 
},10); 
+2

En général, je suis d'accord que c'est une meilleure approche. Mais ne répond pas vraiment à la question de savoir pourquoi ce code ne fonctionne pas. –

+0

ok, cela fonctionne mais maintenant le problème est que dans firefox je reçois toujours cette animation et barre de chargement comme la page est en cours de chargement et le message de transfert de données ... – kmunky

+0

Cela devrait être sans rapport. setTimeout concerne les appels de méthodes internes, tandis que l'indicateur de chargement de Firefox concerne les requêtes HTTP externes. – Anton