Fancybox Recursion вызывает переполнение стека - PullRequest
2 голосов
/ 29 марта 2012

Похоже, что когда я добавляю обратный вызов afterClose к своему fancybox, я получаю эту ошибку:

Uncaught RangeError: Превышен максимальный размер стека вызовов

Этокод, который я использую:

$("a.termsLink").fancybox({
    type            : 'iframe', 
    fitToView       : false,
    width           : 450,
    height          : 600,
    afterClose  : function(){
        $('#regForm').click();
    }
});

То, что должно произойти, - это когда закрывается поле termLink, предполагается, что regForm открывается.У меня истек срок действия с другими обратными вызовами, но проблема, с которой я сталкиваюсь, кажется, не затронута этим.

Решение выглядит следующим образом:

    afterClose      : function(){
        setTimeout(function(){$('#regForm').click();}, 1);
    }

Однако мне кажется, что это очень хакерский метод, проблема заключается в том, что код fancybox пытается вызвать новый ящик, покаанимация для другого блока все еще работает, что вызывает эту проблему.Это задокументированная проблема с FancyBox?Или это функция работы анимационного события jQuery?Есть ли более элегантное решение этой проблемы?

Ответы [ 4 ]

1 голос
/ 14 марта 2013

Если вы используете Twitter Bootstrap <2.3.1, это, как известно, является причиной именно этой проблемы (я только что испытал ее, и обновление начальной загрузки решило проблему) </p>

Подробнее здесь: https://github.com/fancyapps/fancyBox/issues/519

0 голосов
/ 29 марта 2012

Рассматривая сценарий fancybox, они используют эту функцию

    function _cleanup() {
        overlay.fadeOut('fast');

        title.empty().hide();
        wrap.hide();

        $.event.trigger('fancybox-cleanup');

        content.empty();

        currentOpts.onClosed(currentArray, currentIndex, currentOpts);

        currentArray = selectedOpts = [];
        currentIndex = selectedIndex = 0;
        currentOpts = selectedOpts  = {};

        busy = false;
    }

Это в основном подтверждает то, что я говорил ранее.Все экземпляры fancybox очищаются после запуска этой функции.Так что даже если у вас есть одно открытие сразу после того, как оно очищено перед тем, как его действительно показываютРешение, которое вы придумали, кажется лучшим решением, если только вы сами не хотите поиграться со скриптом fancybox:)

0 голосов
/ 07 мая 2012

Вы уверены, что проблема связана с функцией щелчка?Я обнаружил ту же проблему, в том числе, по ошибке, две версии jQuery (jquery-1.2.6.pack.js и jquery-1.4.4.min.js).Я проверил это из-за этой темы загрузка jquery дважды вызывает ошибку? .Вы можете попробовать это проверить.

0 голосов
/ 29 марта 2012

Попробуйте

$("a.termsLink").fancybox({
    type            : 'iframe', 
    fitToView       : false,
    width           : 450,
    height          : 600,
    afterClose  : function(){
        $('#regForm').focus();
    }
});

хотя то, что у вас должно работать, вы правы.Не уверен, но проверьте, что скрипт не закрывает все открытые fancybox.если #regForm открывается в fancybox, то зачем вам нужен тайм-аут.

...