2017-10-18 7 views
-1

私はJavaScriptでティッカーを作成しています。そのスーパー親がティッカーを生成する関数に供給される非常に単純なHTMLマークアップがあります。この関数は、基本的には、.ticker-innerを複数回(再帰的に)クローンし、親の幅がウィンドウの幅以上になるまで1つずつ追加します。HTML要素のクローン作成中にMaxiumコールスタックエラーが発生する

しかし、これらの機能をからオブジェクトにウィンドウスコープに移動すると、正常に動作しますが、今は最大の呼び出しスタックエラーをスローします。

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は、その参照を失うと思います。

何か助けていただければ幸いです。 おかげbuildTickerChildrenClones方法で

+1

このエラーは、 'buildTickerChildrenClones()'関数の再帰のために無限ループを作成したことを意味します。その関数の 'if'条件がなぜ失敗するのかを判断する必要があります。あなたは実際の例、あるいはHTML/CSSだけを含んでいないので、私たちはそれを助けることができません –

+0

私はそれが無限に進むことを知っていますが、私はクローンを追加した後にその幅が更新されないと思っています –

+0

それは、あなたが示した情報の欠如については誰もあなたに決定的な答えを与えることはできません。 –

答えて

0

、どこにもあなたはこのラインで

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

ticketWidthは常に与えるために起こっている、だから、

終了条件を作成するために、より小さな値にouterWidthを設定されていませんすべてのbuildTickerChildrenClonesコールで同じ値。

機能は、基本的.tickerインナー複数回 (再帰的に)をクローンおよび親の 幅が等しいか、ウィンドウ幅よりも大きくなるまで、次々に追加します。だから、

、むしろティッカーのouterWidthをチェックするよりも、あなたはその親のouterwidth

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

をチェックする必要がありますこれは、限りtickersが次の行に身を包むように設計されていないとして、動作するはずです。

関連する問題