的fancybox递归错误
看来,当我添加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动画事件工作方式的一个函数?这个问题有没有更优雅的解决方案?
尝试
$("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脚本:)
因此,这似乎是我应该作为fancybox中的错误报告呢?我的理解是使用setTimeouts和setIntervals是不好的做法。 我很担心,因为Chrome的调用堆栈大小非常巨大。因此,不断向堆栈添加事件并导致递归错误似乎可能是一个严重的问题。 – Xenology 2012-03-28 22:26:24
你确定问题与点击功能有关吗? 我发现相同的问题,包括,错误地包括两个jQuery版本 (jquery-1.2.6.pack.js和jquery-1.4.4.min.js) 删除最后一个解决了问题。 我检查了这个,因为这个话题loading jquery twice causes an error?。 你可以尝试检查它。
如果你使用Twitter的引导< 2.3.1,它是已知会导致此问题的确切的(我刚刚经历它,升级引导解决了这个问题)
+1这是我的问题。 – 2013-04-15 20:18:32
我敢打赌是你有两个库的加载。 – Ohgodwhy 2012-03-28 22:07:01
这绝对不是这种情况,我已经证实了这一点。这是这个错误出现的唯一地方 – Xenology 2012-03-28 22:10:18
'#regForm'是什么?一个'div'标签或一个'form'标签? ...点击它的想法是什么? ...你想要做的是在关闭后将访问者重定向到该元素? ...就像' JFK 2012-03-29 02:42:05