2017-10-18 34 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不是设计给自己换到下一行。