![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
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', '');">
=====================サブウィンドウ側 ここまで=====================
No.8ベストアンサー
- 回答日時:
少し整理してみた。
<form action="run.cgi" method="post">
↑actionやmethodを後でJavascriptで設定する意味がわからなかったので普通に書いておいた。
~
<input type="hidden" name="previewflg" alue="no" />
↑cgi側ではこの値が'yes'ならプレビューの動作をする。
<input type="button" value="登録" onClick="run(this.form);" />
<input type="button" value="プレビュー" onClick="preview(this.form);"/>
function run(F){
//以下2行によって、子画面onloadの処理は不要。
F.target = '_self';
F.preview.value='no';
F.submit();
}
function preview(F){
F.target = 'preName';
F.preview.value='yes';
newWindow = window.open("about:blank","preName","menubar=no,toolbar=no,location=no,status=no,scrollbars=yes,resizable=yes");
newWindow.focus();
}
F.submit();
}
No.9
- 回答日時:
#8、間違えがありました。
F.preview.value='yes';
F.preview.value='no';
↓
F.previewflg.value='yes';
F.previewflg.value='no';
No.6
- 回答日時:
・ 変わっているはずですが、親Windowで、プレビューの前後で
<input type="button" value="check hidden" onclick="alert(document.forms[0].name.value);" />
により、値をチェックしてみてください。
・ あと、心配なのは、登録run()をする前に、2度以上プレビューをしてしまい、
何度もappendChild()してしまうことです。
・ フラグ形式を使うなら最初から、HIRSYU様も述べられているように、
<input type="hidden" name="previewflg" value="NO" />
を記述しておくほうがよいでしょう。そして、プレビューでの変更は、
opener.document.forms[0].name.value='YES';
です。
・ いずれにしても、1度整理しなおしたほうがすっきりします。
No.5
- 回答日時:
ANo.3のような形がいいと思いますが、とりあえず名前のつけ方が悪い気がします。
q.name = 'name';
これを'name'以外の名前にした方がいいと思います。
たとえば、プレビューかどうかのフラグなので'previewflg'等。
でないと「opener.document.forms[0].name」の参照が、
<input name="name" />のinputタグに対する参照なのか、<form name="xxx" />のname属性"xxx"に対する参照なのか、ブラウザ次第で正しい参照を得られないような気がします。
No.3
- 回答日時:
・ こんにちは、
hidden属性をもつ<input>タグは残して、値に削除マークを設定する方法もあります。とりあえず
opener.document.forms[0].name.value='deleted';
としてみたらどうでしょうか。
この回答への補足
お世話になっております。
うーーん、だめでした。
ちなみに以下だとtarget属性すら消えないようです。
nameもtargetも消えていないようです。
<body onLoad="opener.document.forms[0].name.value='delete';opener.document.forms[0].setAttribute('target', '');">
順番を変えると
targetは消えて、nameは消えていないようです。
<body onLoad="opener.document.forms[0].setAttribute('target', '');opener.document.forms[0].name.value='delete';">
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript ①入力フォーム→②確認表示画面→③送信完了画面のコードを書いているのです、 入力フォームから受け取っ 2 2022/05/10 16:45
- PHP 入力した部分を表示させたまま(保持)するにはどうすれば良いでしょうか? 1 2023/01/25 11:14
- PHP PHPで画像の渡しが上手く行きません。 1 2023/02/02 09:39
- JavaScript sessionStorageを調べています。 1 2023/06/20 12:41
- JavaScript フォームが空欄の時にフォームの外をクリックすると、エラーが出るコードを調べています。 1 2023/06/25 11:51
- PHP PHPのエラーの解消法について教えて下さい。 1 2023/02/06 10:48
- HTML・CSS CSSが効かずどのように指定すれば良いか分からないのでアドバイスお願い致します 2 2023/06/07 12:25
- HTML・CSS ボタンをクリックした時に、入力フォームのすぐ下部に、「入力欄が空白です」というテキストメッセージが表 1 2022/04/27 16:25
- HTML・CSS ただいま勉強始めたての初心者です。フォームを縦並べにしたいです。 2 2022/11/20 17:18
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
1つのformで複数のactionを実...
-
インフォシーク翻訳リクエスト...
-
inputタグのtype値がfileの場合...
-
submitをボタン以外にするには
-
送信ボタン押下時に値が未入力...
-
1アクションでPOST・GET、両方...
-
入力フォームの javascript で ...
-
formなしでPOSTデータを送信・受信
-
UTF-8 コードでのmailtoの文字化け
-
同じnameのhiddenで別々の内容...
-
リンクをクリックした時にform...
-
フォーム要素以外にもname属性...
-
画像をボタンのようにフォーカ...
-
指定したデータを別ページフォ...
-
プルダウンメニューでインライ...
-
会員登録フォームの作り方を教...
-
checkboxを「変更不可」にでき...
-
HTMLファイルに、文字を書き込...
-
プロトコルmailtoはサポートさ...
-
HTMLのoptionタグ部分に画像を...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
1つのformで複数のactionを実...
-
javasqliptで複数のテキストボ...
-
inputタグのclass名にコロン「:...
-
動的にnema属性が変化する場合...
-
javaScriptで検索結果の保持
-
一括で値を入力するには?
-
同じ名前が複数あるインプット...
-
グーグルでの化け文字対策は?
-
今日の日付をセットしたいのですが
-
同一ページの複数フォームを一...
-
インフォシーク翻訳リクエスト...
-
商品ページのフォームのテキス...
-
inputタグのtype値がfileの場合...
-
Json のキーと値の出力の違いに...
-
自分のサイト内のワード検索?
-
リクエストパラメータの値によ...
-
親ウィンドウで動的に作成したh...
-
ランダムリンクでリンク先を別...
-
Windows Media Player をJavaSc...
-
Windows Media Playerのサイズ
おすすめ情報