
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で質問しましょう!
関連するカテゴリからQ&Aを探す
今、見られている記事はコレ!
-
隣の枝がはみ出してきたら切ってもいい?最もやってはいけないことは?
「隣の木が越境してきて困るが、勝手に切ってはいけないと聞くし…」そう思っている方も多いだろう。実は、2023年4月1日に民法が改正され、この「越境枝」のルールが大きく変わった。 教えて!gooでも「境界から出て...
-
弁護士が解説!あなたの声を行政に届ける「パブリックコメント」制度のすべて
社会に対する意見や不満、疑問。それを発信する場所は、SNSやブログ、そしてニュースサイトのコメント欄など多岐にわたる。教えて!gooでも「ヤフコメ民について」というタイトルのトピックがあり、この投稿の通り、...
-
弁護士が語る「合法と違法を分けるオンラインカジノのシンプルな線引き」
「お金を賭けたら違法です」ーーこう答えたのは富士見坂法律事務所の井上義之弁護士。オンラインカジノが違法となるかどうかの基準は、このように非常にシンプルである。しかし2025年にはいって、違法賭博事件が相次...
-
釣りと密漁の違いは?知らなかったでは済まされない?事前にできることは?
知らなかったでは済まされないのが法律の世界であるが、全てを知ってから何かをするには少々手間がかかるし、最悪始めることすらできずに終わってしまうこともあり得る。教えてgooでも「釣りと密漁の境目はどこです...
-
カスハラとクレームの違いは?カスハラの法的責任は?企業がとるべき対応は?
東京都が、客からの迷惑行為などを称した「カスタマーハラスメント」、いわゆる「カスハラ」の防止を目的とした条例を、全国で初めて成立させた。条例に罰則はなく、2025年4月1日から施行される。 この動きは自治体...
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
タグを教えてください。
-
ラジオボタンを複数選択したと...
-
jsで質問です。 formをsubmitし...
-
オブジェクト配列の各メンバを...
-
GASでチェックボックスを一括of...
-
GoogleChartの組織図について
-
2025年相性がいい人のサイトの...
-
CookieをWebStoeageに変える
-
Adobe acrobat proでフォームを...
-
Outlookのアカウントがあるとメ...
-
jqueryのselect2で検索欄の文字...
-
<tr>指定した表の行要素をボ...
-
食材の期限を管理するためにGAS...
-
ビデオのJSについて
-
鍵盤アプリで、スマホの画面に...
-
<div>のタッチ状態を維持したま...
-
jQueryでシンセサイザーを作っ...
-
プログラミング 学習
-
HTMLでサブフレームから親のス...
-
ジャバスクリプトについて。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
サイト内検索の設置
-
Json のキーと値の出力の違いに...
-
javaScriptで検索結果の保持
-
「アドオンを実行しようとして...
-
1つのformで複数のactionを実...
-
同一ページの複数フォームを一...
-
ジャバスクリプトでカレンダー...
-
Googleのサイト内検索機能の貼...
-
Document.Writeの使い方を教え...
-
htmlソースの書き換え
-
JavaScript 超初心者です。 Doc...
-
submitをボタン以外にするには
-
submitの処理の後別の画面を表...
-
1アクションでPOST・GET、両方...
-
リンクをクリックした時にform...
-
ラジオボタンで選択した項目に...
-
同じnameのhiddenで別々の内容...
-
mailtoでバイナリーファイルを添付
-
URL パラメータを使ってフォー...
-
長文のmailtoの使い方
おすすめ情報