2012-05-08 68 views
0

在調用$.colorbox.resize();後,我在Firefox和Chrome(以及其他所有內容)中出現堆棧溢出。我已經將問題縮小到了該方法,沒有它,一切運行良好,儘管模式是錯誤的大小。

Uncaught RangeError: Maximum call stack size exceeded 
d.extend.type 
d.extend.makeArray 
d.fn.d.init 
d 
g.plugins.fn.clone 
a.each.a.fn.(anonymous function) 
g.plugins.fn.clone 
a.each.a.fn.(anonymous function) 
g.plugins.fn.clone 
a.each.a.fn.(anonymous function) 
g.plugins.fn.clone 
a.each.a.fn.(anonymous function) 
g.plugins.fn.clone 
a.each.a.fn.(anonymous function) 
g.plugins.fn.clone 
a.each.a.fn.(anonymous function) 
... 

我剛剛在瀏覽器的控制檯中創建了一些動態顏色盒,而不是通過我通常的事件處理程序和方法來運行。每次我嘗試$.colorbox.resize()這些動態顏色盒時,都會出現堆棧溢出。這讓我認爲這個錯誤獨立於顯示和準備顏色盒的任何自定義代碼。

我正在使用jQuery 1.5.2。

爲什麼堆棧溢出發生,我怎樣才能防止它發生?

UPDATE

而且我的控制流一點點僞代碼:

mouseClickHandler = function() 
{ 
    async_method_1(function() 
    { 
     someMethod1() 
    }) 
} 

someMethod1 = function() 
{ 
    async_method_2(function() 
    { 
     someMethod2() 
    }) 
} 
someMethod2 = function() 
{ 
    $.colorbox.resize(); 
} 

更新2

正如我前面提到的,從創建控制檯的顏色框分開上面的代碼也會導致堆棧溢出。例如,如果我在瀏覽器的控制檯中輸入以下兩行,仍然會發生溢出。

$.colorbox({html:'<h1>hello world</h1>'}) 
$.colorbox.resize() 
+1

它是如何在上下文中使用的?一些代碼示例? –

+0

@KyleMacey我添加了一些僞代碼,顯示堆棧以及如何調用該方法。爲了理智的緣故,它被剝離了一些,但是調用'$ .colorbox.resize'時堆棧中的所有方法都存在。 – Jeff

回答

2

我自己想出了這個問題。發生堆棧溢出是因爲colorbox被包含在頁面上兩次。一旦我刪除了第二個腳本標籤,所有東西都再次變成桃色。

沒有理由說爲什麼任何人都需要包含兩次colorbox,但是一個不明確的堆棧溢出對於偶然犯錯誤的可憐的開發人員來說是不合理的懲罰:)。我知道colorbox開發者使用SO。也許,他可以放入冗餘故障安全或帶有有用信息的throw new Error