2010-06-15 9 views
2

Я надеюсь, что кто-то может мне помочь.JQuery слишком много ошибок рекурсии

У меня есть этот код:

<script> 
$(document).ready(function() { 
spectrum(); 
function spectrum(){ 
    $('#bottom-menu ul li.colored a').animate({ color: '#E7294F' }, 16000); 
    spectrum2(); 
} 
function spectrum2(){ 
    $('#bottom-menu ul li.colored a').animate({ color: '#3D423C' }, 16000); 
    spectrum(); 
} 
}); 
</script> 

это работает, но когда я смотрю на поджигатель он говорит, что есть слишком много ошибок рекурсии.

Надеюсь, кто-то скажет мне, почему.

Спасибо!

+0

Добро пожаловать в SO, пожалуйста, не забудьте посетить http://stackoverflow.com/faq – Reigel

ответ

4

Проблема в том, что ваш скрипт никогда не прекращает выполнение.

Когда страница загружается, вы говорите ей, чтобы она выполняла функцию spectrum(). Он запускает эту функцию, и затем ему предлагается запустить функцию spectrum2(), что и делает. Когда он закончит spectrum2(), вы сообщите ему снова запустить spectrum(), и когда все будет сделано, он должен запустить spectrum2() еще раз .. см. Рисунок? Ваш бедный сценарий застрял, выполняя эти две функции снова и снова, навсегда!

Процесс вызова функции (или двух функций, вызывающих друг друга неоднократно) называется recursion, но, как правило, рекурсия в конечном итоге заканчивается каким-то образом. Ваш никогда не заканчивается, поэтому FireBug говорит: «Подожди, этот сценарий никогда не закончится, я бы лучше бросил ошибку!»

Возможно, это не то, чего вы пытаетесь достичь, и исправление, скорее всего, простое. Если бы вы могли попытаться объяснить, чего вы пытаетесь достичь, может быть, мы сможем помочь вам написать правильный код?

0

У вас есть четкая бесконечная рекурсия. specturm() вызывает спектр2(), который, в свою очередь, вызывает спектр(); у вас нет условия для завершения. Вам нужно добавить условие для завершения этой рекурсии. Возможно, вы хотите добиться следующего. Если вы сообщите нам, чего вы пытаетесь достичь, тогда вы получите решение.

<script> 
$(document).ready(function() { 
spectrum(); 

function spectrum(toEnd){ 
    $('#bottom-menu ul li.colored a').animate({ color: '#E7294F' }, 16000, function(){ 
    if(!toEnd) 
     spectrum2(true); 
    }); 
} 
function spectrum2(toEnd){ 
    $('#bottom-menu ul li.colored a').animate({ color: '#3D423C' }, 16000, function(){ 

    if(!toEnd) 
     spectrum(true); 
    }); 
} 
}); 
</script> 
+0

Привет. Спасибо за все ответы, я их очень ценю. О коде - я пытаюсь сделать текст пункта меню мигающим, вот чего я пытаюсь достичь. spectrum() делает цвет текста оттенком черного, а spectrum2() делает его красным. Код на самом деле работает, меня просто беспокоит ошибка, обнаруженная firebug – user367082

-1

использование SetTimeout удалить вызов функций из стека:

function spectrum(){ 
    $('#bottom-menu ul li.colored a').animate({ color: '#E7294F' }, 16000); 
    setTimeout(function() {spectrum2();},100); 
} 

таким образом, спектр имеет шанс закончить в то время как вы начинаете spectrum2. Сделайте то же самое со спектром2.

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