親ウィンドウで動的に作成したhidden値をサブウィンドウから削除
QNo.4132708 複数のボタンに対するActionと動的hiddenについて
で皆様に色々とアドバイスを頂いたものです。
しかし根本的な解決には至らず、また、皆様のお知恵を頂きたく
思います。
現在の問題点としてはサブウィンドウ側でtarget属性とname属性の
削除をonload時に行おうとしていますが、Firefoxだとうまくいき、
IE6だとうまくいかないことまではわかりました。
IE6でもうまくいくようにするにはどうしたらよいか
お知恵をいただければ幸いです。
IEだとremoveChildがうまくいかないようなので、その他方法があれば
よろしくお願い致します。
=====================機能 ここから=====================
入力内容を確認する画面があり、その画面からは実際にデータを
書き込む機能(1)と一時的に書込み、その結果を別ウィンドウで出力
するプレビュー機能(2)を考えています。
(1)も(2)もAction先は同じCGIで、プレビューの場合のみあるhidden値を
持たせ、Action先のCGI側でそのhiddenが存在すればプレビュー機能(2)、
なければ通常登録機能(1)と処理を分けています。
=====================機能 ここから=====================
=====================画面 ここから=====================
※<>はHTMLタグを示す
<form>
確認画面
----------+---------------------------------+
|データ1 | 入力内容1 |
+-------------------------------------------+
|データ2 | 入力内容2 |
----------+---------------------------------+
|データ3 | 入力内容3 |
+-------------------------------------------+
+--------------+ +--------------+
| プレビュー | | 登録 |
+--------------+ +--------------+
<input type="hidden" name="data1" value="入力内容1" />
<input type="hidden" name="data2" value="入力内容2" />
<input type="hidden" name="data3" value="入力内容3" />
</form>
※登録は以下で実行
<input type="button" value="登録" onClick="javascript: run();" />
※プレビューは以下で実行
<input type="button" onClick="javascript: preview('30');" value="プレビュー" />
=====================画面 ここまで=====================
=====================JS ここから=====================
function preview(id){
var q = document.createElement('input');
q.type = 'hidden';
q.name = 'name';
q.value = id;
newWindow =window.open("about:blank","preName","menubar=no,toolbar=no,location=no,status=no,scrollbars=yes,resizable=yes");
newWindow.focus();
document.forms[0].appendChild(q);
document.forms[0].target = 'preName';
document.forms[0].action = run.cgi;
document.forms[0].method = 'post';
document.forms[0].submit();
}
function run(){
document.forms[0].action = run.cgi;
document.forms[0].method = 'post';
document.forms[0].submit();
return;
}
=====================JS ここまで=====================
=====================サブウィンドウ側 ここから=====================
<body onLoad="opener.document.forms[0].removeChild(opener.document.forms[0].name);opener.document.forms[0].setAttribute('target', '');">
=====================サブウィンドウ側 ここまで=====================
補足
補足させていただきます。 親画面から子画面へ遷移して また親画面に戻ってきてからさらに別データをもって 先程と同じ子画面に遷移して・・・ ということを何度も繰り返し行いたいのですが 親画面にある更新ボタンを押下するまでずっとセッションに データテーブルとしてデータを持ちまわるためサーバーアクセスが 起こらず子画面のPageLoadを通ってくれないのです。 なのでサーバーアクセスを意図的に行いPageLoadを 通って欲しいからです。 でもそうするとレスポンスが帰ってこないのですね・・・・ 他の方法を考えてみます。