JQuery - Uncaught RangeError: превышен максимальный размер стека вызовов
Следующий код (см. Fiddle here) выдает переполнение стека, указанное в заголовке вопроса. Я пытаюсь получить тень окна, чтобы отображать вокруг кругового изображения в импульсном эффекте. Может ли кто-нибудь указать на рекурсию, пожалуйста? Я очень новичок в Javascript и не вижу его. Спасибо.
HTML
<div id="pulseDiv">
<a href="#" id="advisers-css-image">
<div id="advisersDiv"><img src="http://ubuntuone.com/1djVfYlV62ORxB8gSSA4R4"></div>
</a>
</div>
CSS
.pulse { box-shadow: 0px 0px 4px 4px #AEA79F; }
Javascript
function fadeIn() {
$('#pulseDiv').find('div.advisersDiv').delay(400).addClass("pulse");
fadeOut();
};
function fadeOut() {
$('#pulseDiv').find('div.advisersDiv').delay(400).removeClass("pulse");
fadeIn();
};
Ответы
Ответ 1
Ваши вызовы выполняются рекурсивно, что бесконечно толкает функции в стек, что приводит к превышению максимального количества стека вызовов из-за рекурсивного поведения. Вместо этого попробуйте использовать setTimeout, который является обратным вызовом.
Также на основе вашей разметки ваш селектор ошибочен. это должно быть #advisersDiv
function fadeIn() {
$('#pulseDiv').find('div#advisersDiv').delay(400).addClass("pulse");
setTimeout(fadeOut,1); //<-- Provide any delay here
};
function fadeOut() {
$('#pulseDiv').find('div#advisersDiv').delay(400).removeClass("pulse");
setTimeout(fadeIn,1);//<-- Provide any delay here
};
fadeIn();
Ответ 2
функция fadeIn()
вызывает функцию fadeOut()
, которая снова вызывает функцию fadeIn()
. рекурсия находится в JS.