2

看来,当我添加afterClose回调看中了我的箱子我得到这个错误:的fancybox递归错误

Uncaught RangeError: Maximum call stack size exceeded 

这是我使用的代码:

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

是什么应该发生的是当termsLink框关闭时,regForm应该打开。我用不同的回调函数来验证,但我遇到的问题似乎不受此影响。

的解决问题的方法如下:

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

但是,这种感觉就像一个非常哈克方法对我来说,这个问题似乎是在的fancybox代码改掉调用新的箱子,同时动画的其他的盒子仍然在运行,这会导致这个问题。这是FancyBox记录的问题吗?或者这是jQuery动画事件工作方式的一个函数?这个问题有没有更优雅的解决方案?

+0

我敢打赌是你有两个库的加载。 – Ohgodwhy 2012-03-28 22:07:01

+0

这绝对不是这种情况,我已经证实了这一点。这是这个错误出现的唯一地方 – Xenology 2012-03-28 22:10:18

+0

'#regForm'是什么?一个'div'标签或一个'form'标签? ...点击它的想法是什么? ...你想要做的是在关闭后将访问者重定向到该元素? ...就像' JFK 2012-03-29 02:42:05

回答

0

尝试

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

虽然你有什么应该工作,你是对的。不确定,但检查脚本不会关闭所有fancybox的打开。如果#regForm被打开成fancybox,那么为什么你需要超时。

+0

我应该提到regForm和termsLink都是fancybox,所以调用click函数试图打开不同的fancybox,但是我的假定afterClose方法将提供足够的事件分离。 – Xenology 2012-03-28 22:07:42

+0

你在使用什么版本的花式框? – 2012-03-28 22:15:40

+0

fancyBox v2.0.4 – Xenology 2012-03-28 22:20:32

0

展望的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

因此,这似乎是我应该作为fancybox中的错误报告呢?我的理解是使用setTimeouts和setIntervals是不好的做法。 我很担心,因为Chrome的调用堆栈大小非常巨大。因此,不断向堆栈添加事件并导致递归错误似乎可能是一个严重的问题。 – Xenology 2012-03-28 22:26:24

0

你确定问题与点击功能有关吗? 我发现相同的问题,包括,错误地包括两个jQuery版本 (jquery-1.2.6.pack.js和jquery-1.4.4.min.js) 删除最后一个解决了问题。 我检查了这个,因为这个话题loading jquery twice causes an error?。 你可以尝试检查它。

1

如果你使用Twitter的引导< 2.3.1,它是已知会导致此问题的确切的(我刚刚经历它,升级引导解决了这个问题)

更多细节在这里:https://github.com/fancyapps/fancyBox/issues/519

+0

+1这是我的问题。 – 2013-04-15 20:18:32