2

私が私の化粧箱にafterCloseコールバックを追加するとき、私はこのエラーを取得していているようです:Fancybox再帰エラー

Uncaught RangeError: Maximum call stack size exceeded 

これは私が使用していたコードです:

は何
$("a.termsLink").fancybox({ 
    type   : 'iframe', 
    fitToView  : false, 
    width   : 450, 
    height   : 600, 
    afterClose : function(){ 
     $('#regForm').click(); 
    } 
}); 

をリンクボックスが閉じると、regFormが開くはずです。私はdifferntコールバックで失効しましたが、私が実行している問題は、この影響を受けていないようです。

ソリューションは以下のように表示されます。私にとって非常にハック方法のように感じているしかし

afterClose  : function(){ 
     setTimeout(function(){$('#regForm').click();}, 1); 
    } 

を、問題がfancyboxコードがアニメーションしながら、新しいボックスを呼び出すためにtrysということのようです他のボックスはまだ実行されていますが、この問題が発生します。これはFancyBoxの文書化された問題ですか?それとも、これはjQueryアニメーションイベントの仕組みの関数ですか?この問題に対してより洗練されたソリューションがありますか?

+0

私の賭けあなたは2つのライブラリの読み込みを持っているということです。 – Ohgodwhy

+0

これは間違いなく、私はそれを確認しました。そして、これはこのエラーが表示される唯一の場所です – Xenology

+0

'#regForm'とは何ですか? 'div'タグまたは' form'タグ? ...それをクリックするアイデアは何ですか? ...あなたがやろうとしているのは、訪問者を終了後にその要素にリダイレクトすることですか? ... JFK

答えて

0

はあなたが正しい動作するはず持っているものであるが

$("a.termsLink").fancybox({ 
    type   : 'iframe', 
    fitToView  : false, 
    width   : 450, 
    height   : 600, 
    afterClose : function(){ 
     $('#regForm').focus(); 
    } 
}); 

を試してみてください。確かではありませんが、スクリプトがすべてのfancyboxを開いていないことを確認してください。 #regFormがfancyboxに開かれている場合、なぜタイムアウトが必要なのでしょうか?

+0

私はregFormとtermsLinkの両方がファンシーボックスであることを言及する必要があるので、click関数を呼び出すと別のfancybox afterCloseメソッドがイベントから十分に離れていると仮定していました。 – Xenology

+0

どのファンシーボックスのバージョンを使用していますか? –

+0

fancyBox v2.0.4 – Xenology

0

これは基本的に私が前に言っていたものを確認し、彼らはこの機能を使用fancyboxスクリプト

function _cleanup() { 
     overlay.fadeOut('fast'); 

     title.empty().hide(); 
     wrap.hide(); 

     $.event.trigger('fancybox-cleanup'); 

     content.empty(); 

     currentOpts.onClosed(currentArray, currentIndex, currentOpts); 

     currentArray = selectedOpts = []; 
     currentIndex = selectedIndex = 0; 
     currentOpts = selectedOpts = {}; 

     busy = false; 
    } 

に探しています。この機能を実行すると、fancyboxのすべてのインスタンスがクリアされます。だから、実際に表示される前にクリアされた後すぐに1つのオープニングがあるにもかかわらず。あなたが解決した解決策は、あなた自身のfancyboxスクリプトを手がかりにしない限り、より良い解決策になります:)

+0

これは私がファンシーボックスのバグとして報告しなければならない何かのようです。私の理解は、setTimeoutsとsetIntervalsの使用は悪い習慣であるということです。 Chromeの呼び出しスタックサイズが不当に大きいので、私は心配しています。スタックにイベントを継続的に追加して再帰エラーを引き起こすことは、重大な問題であるようです。 – Xenology

0

問題はクリック機能に関連していますか? 誤って2つのjQueryバージョン (jquery-1.2.6.pack.jsとjquery-1.4.4.min.js)を含む同じ問題が見つかりました 最後のものを削除して問題を解決しました。 このトピックはloading jquery twice causes an error?のため、これを確認しました。 あなたはそれをチェックすることができます。あなたはTwitterのブートストラップ< 2.3.1を使用している場合、この正確な問題を引き起こすことが知られてい