2010-03-11 5 views
1

Попытка создать слайд-шоу фонового изображения, и я получаю эту ошибку ... Это код, который я пытаюсь выполнить:«слишком много рекурсии» ошибка 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) 

}); 

ответ

5

Когда вы пишете arguments.callee(i), вы вызоваarguments.callee и передавая ее результат (если таковые имеются) setTimeout. Это приводит к бесконечной рекурсии.

Вам нужно пройти setTimeout и анонимную функцию, которая вызывает arguments.callee позже, как это:

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

Это создает бесконечное recrusive метод call to backgroundSlide.

Почему бы вам не попробовать другую реализацию, используя вместо этого setInterval?

Что-то вроде этого:

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: Выше код не проверял, но вы получите суть.

Смежные вопросы