2010-03-24 6 views
3

J'ai fait cet extrait qui clique sur un lien après 10 secondes:fonction Execute chaque nième secondes

function timeout() { 
    window.setTimeout(function() { 
    $('img.left').click(); 
    }, 1000); 
    setTimeout("timeout()", 1000); 
} 
timeout(); 

Ma question est, comment puis-je exécuter cette fonction tous les 10e de seconde, au lieu d'une seule fois?

Est-ce la meilleure façon de procéder, ou y a-t-il une sorte de bonne méthode jQuery que vous préférez?

Répondre

7

Utilisation setInterval au lieu de setTimeout

http://javascript.about.com/library/blstvsi.htm

+1

Notez que la différence essentielle entre les deux est la suivante: 'setInterval()' exécute toutes les millisecondes X, une série d'auto-appeler 'setTimeout()' fonctions prennent le temps d'exécution réelle de la fonction de la charge utile en compte . Parfois, ce dernier est plus souhaitable. – Tomalak

+0

En outre, s'il y a quelque chose qui interrompt (comme les événements qui déclenchent) le navigateur, les intervalles peuvent faire la queue et se déclencher plusieurs fois de suite. C'est pourquoi je préfère setTimeout. Plus d'informations: http://ejohn.org/blog/how-javascript-timers-work/ –

3

setInterval(yourFunction, 1000 * 10);

(temps miliseconds: 1000 est de 1 seconde, 1000 * 10 est de 10 secondes)

Ce qui fonctionne mieux que "setTimeout"; plus lisible, etc.

3

J'utilise cette approche pour les mises à jour sondages, récurrents et animations:

var timerId = setInterval(function() { 

    if (timeToStopConditionMet) { 
     clearInterval(timerId); 
     return; 
    } 

    // your recurring code 

}, 10000); // 10000 makes this code execute every 10 seconds 
+0

Est-ce acceptable pour faire des actualisations périodiques via AJAX sans attacher les ressources CPU? –

+0

Je n'ai pas de données empiriques, mais d'après mon expérience, tant que la fonction est raisonnablement courte et efficace et que l'intervalle entre les appels est suffisant, la consommation du processeur est non-conséquente. En termes d'actualisations périodiques, cette méthode devrait être correcte, mais n'oubliez pas que si vous effectuez des manipulations DOM sur des éléments avec des événements attachés, ces événements ne sont pas éliminés lorsque les éléments auxquels ils sont attachés sont supprimés du DOM. – Andy

1

Oui, setInterval(timeout, 1000) ne presque la même chose. C'est un peu différent en ce que l'intervalle suivant commence à compter immédiatement après 1000ms, pas après que le script qui a été exécuté soit terminé (ou même commencé). Je le défends précisément pour cette raison, dans la plupart des cas. Votre implémentation est meilleure, IMO.

En outre, vous n'avez pas besoin de passer la fonction timeout dans une chaîne, vous pouvez simplement passer la référence directement, à savoir setTimeout(timeout, 1000) au lieu de setTimeout("timeout()", 1000).

0
window.onload=function(){ 
    GetCount(dateFuture1, 'countbox1'); 
}