2010-10-31 6 views
3

je me suis ce morceau de l'écriture (runned localement):JavaScript - SetInterval ne fonctionne pas correctement

<script> 

last = 0; 

function uploadnew(){ 

var randomnumber=Math.floor(Math.random()*6); 
if(randomnumber != last){ 
    document.forms['f'+randomnumber].submit(); 
} else { uploadnew(); } 

} 

setInterval (uploadnew(), 1000*60*5); 

</script> 

Mais il semble que setInterval ne fonctionne pas/fonction d'envoi de formulaire ne fonctionne pas ...

Toute aide sera appréciée!

Merci!

+0

Si vous soumettez un formulaire à la même fenêtre, il va charger une nouvelle page et arrêter l'intervalle – mplungjan

+0

yeap, je sais. Je le charge dans iframe. – Paul

Répondre

9

Vous devez appeler sans parenthèses setInterval() sur votre fonction, comme ceci:

setInterval(uploadnew, 1000*60*5); 

l'aide entre parenthèses vous l'appelez immédiatement et l'affectation du résultat (undefined) pour être exécuté sur un intervalle, n'utilisez pas parenthèses pour passer la fonction elle-même, pas le résultat de la fonction.

2

Utilisez

setTimeout (expression, timeout); 
5

Vous devez retirer le () après uploadnew dans l'appel setInterval:

setInterval (uploadnew, 1000*60*5); 

En JavaScript, les fonctions sont des objets de première classe qui peuvent être transmis à d'autres fonctions. Dans cet exemple, vous voulez passer la fonction elle-même à setInterval, ne pas l'appeler en premier, puis passer sa valeur de retour.

L'utilisation de setInterval ("uploadnew()", 1000*60*5); n'est pas recommandée car il s'agit d'une forme "cachée" d'évaluation. Eval is evil and you shouldn't use it if you don't have to.

3

Vous devez transmettre une référence à la fonction au lieu de l'appeler.

Ce:

setInterval (uploadnew(), 1000*60*5); 

devrait être:

setInterval (uploadnew, 1000*60*5); 

Si vous deviez appeler comme vous étiez, vous auriez besoin d'avoir uploadnew()retour une fonction à passer à setInterval.

function uploadnew() { 
    return function(){ 
     var randomnumber=Math.floor(Math.random()*6); 
     if(randomnumber != last) { 
      document.forms['f'+randomnumber].submit(); 
     } else { uploadnew()(); } 
    } 
} 

Notez la modification de l'appel récursif.

Questions connexes