Javascript Fancybox递归导致堆栈溢出

Javascript Fancybox递归导致堆栈溢出,javascript,jquery,jquery-plugins,fancybox,jquery-events,Javascript,Jquery,Jquery Plugins,Fancybox,Jquery Events,当我向fancybox添加afterClose回调时,似乎出现了以下错误: 未捕获范围错误:超过最大调用堆栈大小 这是我正在使用的代码: $("a.termsLink").fancybox({ type : 'iframe', fitToView : false, width : 450, height : 600, afterClose : function(){

当我向fancybox添加afterClose回调时,似乎出现了以下错误:

未捕获范围错误:超过最大调用堆栈大小

这是我正在使用的代码:

$("a.termsLink").fancybox({
    type            : 'iframe', 
    fitToView       : false,
    width           : 450,
    height          : 600,
    afterClose  : function(){
        $('#regForm').click();
    }
});
应该发生的是,当termsLink box关闭时,regForm应该打开。我已经用不同的回调过期,但是我遇到的问题似乎没有受到影响

解决方案如下:

    afterClose      : function(){
        setTimeout(function(){$('#regForm').click();}, 1);
    }
然而,对我来说,这是一种非常粗糙的方法,问题似乎是fancybox代码试图调用新的box,而另一个box的动画仍在运行,这导致了这个问题。这是FancyBox的记录问题吗?或者这是jQuery动画事件工作方式的一个功能?这个问题有没有更优雅的解决方案?

试试看

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

虽然你所拥有的应该有用,但你是对的。不确定,但检查脚本是否未关闭所有fancybox的打开状态。如果将#regForm打开到fancybox中,那么为什么需要超时

查看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脚本:)

您确定问题与单击功能有关吗? 我发现了同样的问题,包括两个jQuery版本 (jquery-1.2.6.pack.js和jquery-1.4.4.min.js) 移除最后一个解决了问题。 我检查这个是因为这个话题。
你可以试试看

如果您使用的是Twitter Bootstrap<2.3.1,我们知道它会导致这个问题(我刚刚经历过,升级Bootstrap解决了这个问题)


这里有更多详细信息:

我打赌你有两个库的加载。这绝对不是事实,我已经验证过了。这是这个错误显示的唯一地方,什么是
#regForm
div
标签或
表单
标签。。。点击它的想法是什么。。。您试图做的是在关闭后将访问者重定向到该元素。。。像
#regForm一样,是另一个fancybox,我试图在术语链接fancybox的出口调用它。从技术上讲,它是一个锚定标记,但它附加到一个fancybox。有点相关:我应该提到,regForm和termsLink都是fancybox,所以调用click函数就是试图打开一个不同的fancybox,但我的假设是afterClose方法将提供与事件足够的分离。您使用的是什么版本的fancy box?所以这似乎是我应该在fancybox中报告的bug?我的理解是,使用设置超时和设置间隔是不好的做法。我很担心,因为Chrome中的调用堆栈大小太大了。因此,不断向堆栈添加事件并导致递归错误似乎是一个严重的问题。