0

PHP ベースの Web アプリケーション内に複雑な入力フォームがあります。少し構造化するために、「多面的なライトボックス」を導入して、「表示」を「なし」に設定したインライン DIV という名前のフォームの一部を「ライトボックス」スタイルのダイアログ ボックス内に表示できるようにしました。DIVを表示すると、それを中央のDIVにコピーしてフォームから取り出し、そこに含まれる入力フォームへのすべての変更が失われることに気付きました。

インライン DIV を中央のライトボックス ダイアログにする mf_lightbox コードで問題となっているコードは次のとおりです。

showBoxByID : function(id, boxWidth, boxHeight) {
this.lightboxType = 'id';
this.lightboxCurrentContentID = id;
this.setLightboxDimensions(boxWidth, boxHeight);
var element = $(id);
var contents = $('mf_boxContents');
contents.appendChild(element);  // <!-- This is where it happens
Element.show(id);
this.showBox();
return false;
},

をコピーしない方法を知っている人はますか? プログラミング言語のポインタのようなものですか? この mf_lightbox は速くて素晴らしいので、ずっと使い続けたいと思っています。

私は十分に明確ですか?意味がわかりますか?これを別の方法で行うライトボックスの代替案を知っていますか?

ご回答ありがとうございます。

4

1 に答える 1

2

解決策は思ったよりずっと簡単でした。ライトボックスに挿入する要素の親を保存する必要がありました。

// Save parent?
this.contentParent = element_to_be_inserted.parentNode; 

閉じるときに、要素を親に戻します。

// Move elements back to original location
if (this.contentParent != null)
 this.contentParent.appendChild($(this.lightboxCurrentContentID));
else
 body.appendChild($(this.lightboxCurrentContentID));

これは、そこにあるライトボックスでも同じように機能するはずです。完了したら、要素をその親に戻すだけです。

もちろん、要素がライトボックスにある限り、「this.form」を使用して周囲のフォームに対処できないという欠点があります。

于 2009-10-30T18:04:58.860 に答える