克隆HTML元素时Maxium调用堆栈错误

时间:2017-10-18 10:37:06

标签: javascript jquery recursion

我正在使用JavaScript编写代码。有一个非常简单的HTML标记,其超级父标记被输入到创建股票代码的功能中。该函数基本上克隆.ticker-inner多次(递归)并逐个追加,直到其父宽度等于或大于窗口宽度。

但是,如果我将这些函数从 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 个答案:

答案 0 :(得分:0)

buildTickerChildrenClones方法中,您无法将outerWidth设置为较小的值以创建退出条件

所以,在这一行

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

ticketWidth始终会在每次buildTickerChildrenClones来电中提供相同的值。

  

该函数基本上克隆了.ticker-inner多次   (递归地)并且一个接一个地追加到它的父亲之后   宽度等于或大于窗口宽度。

因此,您需要检查其父级outerWidth

,而不是检查代码的outerwidth
var tickerWidth = parseInt(tickers.parent().outerWidth(), 10);

这应该有效,只要tickers不是设计为将自己包装到下一行。