0

非表示の div 要素のコンテンツは、最初のモーダル ポップアップ表示後に削除されます。

以下のハンドラー関数を使用すると、モーダルは非表示の div を正常に表示し、モーダルをクリアした後、以下のハンドラー関数を呼び出すと、「ターゲットが存在しない」というアラートが返され、非表示のダイビング要素は実際にはなくなります.

function OnSubmitHandler() {    
if (e = $('modalcontainer')) {
    SqueezeBox.initialize({
        size : {x : 300, y : 120}
    });
    SqueezeBox.open(e, {
        handler : 'adopt',
        overlayOpacity : 0.7,
        onOpen : function(){
            e.style.display = 'block';
        },
        onClose : function(){
            e.style.display = 'none';
        }
    });
}else{
    alert('Target does not exist');
}
}

これは単純なはずで、ハンドラー関数は記述どおりに正常に動作しますが、非表示の div コンテンツは最初の表示後に消えてしまいます。原因が分からず困っています。私は何かが欠けているに違いない。

4

2 に答える 2

2

コンテンツはあなたadoptのものなので、DOM 内でスクイーズボックスに移動されます。スクイーズボックス インスタンスを再利用して毎回初期化するわけではないため、次の初期化ではコンテンツ領域 (まだ e を含む) が空になり、それ以上採用するものはありません。

インスタンスを再利用するか、代わりにクローンをサポートしているかどうかを確認してください。また、e を dom に戻したり、onClose を参照するだけでなく、e.dispose() を実行して保護することもできます。次にe = e || $()、グローバルではなく、スコープ付き変数として保持します

于 2012-03-12T20:32:16.450 に答える
2

変化する

if (e = $('modalcontainer')) {

var e = $('modalcontainer'); 
var e = e.clone(); 
if (e) {

このようにして、表示したい要素の正確なコピーを作成し (クローンの ID を保存)、閉じるときに採用ハンドラーがクローンを破棄するため、メモリ リークを心配する必要はありません。

于 2012-11-20T11:04:19.023 に答える