2017-10-18 57 views
-1

我在javascript中創建一個代碼。有一個非常簡單的HTML標記,其超級父代被添加到創建代號的函數中。該函數基本上可以多次克隆.ticker-inner(遞歸),並且一個接一個地追加直到它的父寬度變得等於或大於窗口寬度。克隆HTML元素時Maxium調用堆棧錯誤

但是,如果我將這些函數從SU對象移到窗口範圍,它們可以正常工作,但現在它會引發最大調用堆棧錯誤。

var SU = { 
    createTicker: function(tickerWrapper) { 
    var tickers = tickerWrapper.find('.tickers'), 
     child = tickers.find('.ticker-inner'); 
    SU.buildTickerChildrenClones(tickers, child); 
    }, 
    buildTickerChildrenClones: function(tickers, child) { 
    var tickerWidth = parseInt(tickers.outerWidth(), 10); 
    var windowWidth = jQuery(window).width(); 

    if (tickerWidth + 35 <= windowWidth) { 
     child.clone().insertAfter(child); 
     SU.buildTickerChildrenClones(tickers, child); 
    } 
    } 
} 

我想,tickers變量失去其參考。

任何幫助表示讚賞。 感謝

+1

該錯誤表示由於'buildTickerChildrenClones()'函數的遞歸,您創建了一個無限循環。你需要確定爲什麼你的'if'條件在該函數中不會漏掉。你還沒有包括一個工作的例子,甚至只是HTML/CSS,所以我們不能幫你做這件事 –

+0

我知道它的行進方式是無限的,但我猜測在附加克隆後代價寬度沒有更新 –

+0

這似乎是合乎邏輯的,雖然沒有人可以給你一個明確的答案,缺乏你所顯示的信息。 –

回答

0

buildTickerChildrenClones方法,無處您正在設置outerWidth到一個更低的值,以創建一個退出條件

因此,在這一行

var tickerWidth = parseInt(tickers.outerWidth(), 10); 

ticketWidth總是去給在每個buildTickerChildrenClones呼叫中都有相同的值。

功能基本上克隆.ticker-內多次 (遞歸的)和一個附加後的另一直到其父 寬度變成等於或大於窗口寬度大。

因此,而不是檢查行情的outerWidth,您需要檢查其父outerwidth

var tickerWidth = parseInt(tickers.parent().outerWidth(), 10); 

這應該工作,只要tickers不是設計給自己換到下一行。