2010-03-11 11 views
1

Essayer de créer un diaporama image de fond et je reçois cette erreur ... C'est le code que je suis en train de mettre en œuvre:« trop récursion » erreur jquery

var $j = jQuery.noConflict(); 
$j(function(){ 
    var bgArr = [ 'sample1.jpg','sample2.jpg','sample3.jpg' ]; 
    function backgroundSlide(i) { 
      $j("#home_sub_banner").css("background-image", "url("+bgArr[i++]+")"); 
      if (i == bgArr.length) i = 0; 
      var st = setTimeout(arguments.callee(i), 1000); 
    } 
backgroundSlide(0) 

}); 

Répondre

5

Lorsque vous écrivez arguments.callee(i), vous êtes appelerarguments.callee et passer son résultat (le cas échéant) à setTimeout. Cela entraîne une récursion infinie.

Vous devez passer setTimeout et fonction anonyme qui appelle arguments.callee plus tard, comme ceci:

var me = arguments.callee; 
setTimeout(function() { me(i); }, 1000); 
1

Cela crée une recrusive infinie Appel de méthode au backgroundSlide. Pourquoi ne pas essayer une autre implémentation en utilisant setInterval à la place?

Quelque chose comme ceci:

var bgArr = [ 'sample1.jpg','sample2.jpg','sample3.jpg' ]; 
var currentBg = 0; 
function backgroundSlide() { 
     $j("#home_sub_banner").css("background-image", "url("+bgArr[currentBg++]+")"); 
     if (currentBg == bgArr.length) currentBg = 0; 
} 
setInterval(backgroundSlide, 1000); 

PS: Au-dessus de code non testé, mais vous aurez l'essentiel de celui-ci.

Questions connexes