setTimeout ne s'exécute qu'une seule fois?

function slide()
{
    if($('.current').is(':last-child')){
        $('.current').removeClass('.current');
        $('#imgholder').first().addClass('.current');
        $('#imgholder').animate({left: '3920px'});
    }
    else{
        $nxt=$(".current");
        $(".current").removeClass("current");
        $nxt.next().addClass("current");
        $('#imgholder').animate({left: '-=980'},{duration: 'slow', easing: 'easeOutBounce' });
        }
}
var loop_handle= setTimeout("slide()",'3000');

J'ai mis ce code dans la section d'en-tête et le setTimeout ne s'exécute qu'une seule fois

Aide Plz plz voir http://www.beta.storeji.in/

21
demandé sur pahnin 2011-10-23 20:24:28

8 réponses

setTimeout ne devrait fonctionner qu'une fois. Vous cherchez setInterval.

var loop_handle = setInterval(slide, 3000);

En outre, le deuxième argument devrait être un nombre, pas une chaîne. Lorsque l'appel de fonction ne nécessite aucun argument, il est préférable de faire référence à la fonction au lieu d'utiliser une chaîne. Une chaîne serait convertie en une fonction. Cette fonction sera exécutée dans le cadre de la fenêtre.

  setInterval("slide()", 3000);
//becomes
  setInterval(Function("slide();"), 3000);
60
répondu Rob W 2016-06-19 23:30:23

Vous ne l'appelez qu'une seule fois, donc il ne s'exécutera qu'une seule fois.

Peut-être que vous pensez à "setInterval()".

Lorsque vous l'appelez, en passant, passez simplement le nom de la fonction et non une chaîne:

setInterval(slide, 3000);
5
répondu Pointy 2011-10-23 16:25:57

Vous recherchez setInterval

Voir: https://developer.mozilla.org/en/window.setInterval

4
répondu AndreyKo 2011-10-23 16:26:17

La fonction setTimeout ne s'exécute qu'une seule fois! Si vous voulez l'exécuter plus de fois, vous devez utiliser setInterval:

var loop_handle= setInterval("slide()",'3000');

Vous pouvez également utiliser setTimeout à la fin de la fonction slide() pour re-set-timeout à nouveau:

var loop_handle;
function slide() {
    if($('.current').is(':last-child')) {
        $('.current').removeClass('.current');
        $('#imgholder').first().addClass('.current');
        $('#imgholder').animate({left: '3920px'});
    }
    else {
        $nxt=$(".current");
        $(".current").removeClass("current");
        $nxt.next().addClass("current");
        $('#imgholder').animate({left: '-=980'},{duration: 'slow', easing: 'easeOutBounce' });
    }
    loop_handle = setTimeout("slide()",'3000');
}
loop_handle = setTimeout("slide()",'3000');
4
répondu javad amiry 2011-10-23 16:26:39

Oui, setTimeout ne s'exécute qu'une seule fois. Vous avez besoin de setInterval.

2
répondu DonVaughn 2011-10-23 16:25:29

C'est parce Que setTimeout() est censé fonctionner qu'une seule fois. Afin de déclencher un événement sur les intervalles définis utilisateur setInterval().

2
répondu MeLight 2011-10-23 16:25:35

Utilisez setTimeout avec récursion (boucle sans fin)

Si vous voulez conserver l'espace exact entre chaque appel de fonction, utilisez setTimeout à la place setInterval. setInterval peut se chevaucher à un moment donné et ce n'est souvent pas un comportement attendu.

(function test(){
  setTimeout(function(){
    console.log(1);
    testt();
  }, 2000)
})()
0
répondu DevWL 2018-02-01 14:49:23

Ce problème se produit généralement lorsque vous utilisez setTimeout dans la boucle de récursion, par exemple dans le rappel ajax et lorsque vous voulez exécuter quelque chose de récursivité, vous vous attendez à ce que setTimeout fonctionne comme passé. n'oubliez pas d'utiliser setInterval dans les fonctions de non-récursivité.

0
répondu Pouya Sa 2018-02-03 08:31:17