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