はじめまして。leaz024と申します。

仕事で次のようなものHTMLを作成することになりました。
・CGIで表示したページ内のボタンで、小窓(入力フォーム)を開く。
・小窓で送信ボタンを押すと、小窓は閉じる。
・送信された内容がサーバで処理された後、親窓を自動的に更新して、内容を反映させる。

CGIはPerlで作成しており、HTMLにはJavaScriptを使ってもよいことになっています。
このような動作をさせたいのですが、やり方が分かりません。
どなたか教えてください。
お願いします。

A 回答 (2件)

文章を書くのは苦手なのでサンプルを挙げておきます。


1.親ウインドウ(sample01.html)に名前がなかったらユニークに
なるように名前を付ける。
2.リンククリックで子ウインドウを表示
3.子ウインドウのリンクをクリックしたら親ウインドウにtargetを指定して
サーバーにパラメータをPOSTする(サンプルではgooが表示されます)
こんな感じでしょうか?

----- sample01.html ここから -------
<html>
<head>
<script>
alert('このwindowの名前\n'+window.top.name)
if(window.top.name==""){
myDate = new Date()
nowH = myDate.getHours()
nowM = myDate.getMinutes()
nowS = myDate.getMilliseconds()
winname = nowH+":"+nowM+":"+nowS
window.top.name=winname
alert('このwindowに名前をつけました')
}
function test(winname, html){
win = window.open(html,winname);
}
</script>
</head>
<body>
<a href="javascript:test('hoge','sample02.html')">hogeウインドウopen</a>
</body>
----------- ここまで -------------------

---------- sample02.html ----------
<html>
<head>
<script>
winname=window.opener.top.name

function link(){
document.aaa.target = winname
document.aaa.submit()
window.close()
}
</script>
</head>
<body>
<a href="javascript:link()">親ウインドウにgoo表示</a>
<form name="aaa" method="post" action="http://www.goo.ne.jp" target="">
</form>
</body>
------------------ ここまで -------------------
    • good
    • 1
この回答へのお礼

なるほど!親の方にムリヤリ名前を付けといて、子の送信先を親にするんですね。
これでうまくいきました!!
ありがとうございました。

お礼日時:2001/04/10 23:08

CGIが使えないから、簡易的だけど、こういうことをしたいのかな?(→参考URL)



q61780.html (子ウィンドウを開く)
q61780-child.html (送信画面)
q61780-child2.html (送信後の画面であり、親ウィンドウを更新する)
q61780-second.html (何もしていない)

飾ったとこをしていないので、ソースを見たら簡単にわかると思います。

参考URL:http://users.goo.ne.jp/happy_people/
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q子→親ウインドウへデータを受け渡し、子ウィンドウを閉じる。

このような処理はできないでしょうか?

子ウィンドウはコード番号の検索用。該当のコードのリンクをクリックすると、そのコード番号を親ウィンドウのテキストボックスへ落とし込む。そのタイミングで、子ウィンドウは閉じる。
子→親ウインドウへのデータの受け渡しと、子ウィンドウのクローズを同時に行うようなイメージです。
よろしくお願いします。

Aベストアンサー

こんにちは

【親ウィンドウ】
<form action="xxx.php" method="POST" name="myForm">
顧客コード
<input type="text" name="kokyaku_cd" size="10">
<a href="javascript:void(0)" onClick="window.open('search.html','search','menubar=no,height=400,width=300');">検索</a>
</form>

【子ウィンドウ】
<script language="javascript"><!--
function ich(n) {
window.opener.document.myForm.kokyaku_cd.value=n;
window.close();
}
//--></script>

<table>
<tr>
<th>顧客コード</th>
<th>顧客名称</th>
</tr>
<tr>
<td><a href="javascript:ich('ABC商店')">0001</a></td>
<td>ABC商店</td>
</tr>
<tr>
<td><a href="javascript:ich('DEF商店')">0002</a></td>
<td>DEF商店</td>
</tr>
</table>

もしくはNo.1様の言うようにidを設定して
【親画面】
<input type="text" name="kokyaku_cd" size="10" id="kokyaku_cd">

【子画面 function内】
window.opener.document.getElementById("kokyaku_cd").value=n;

でできると思います

こんにちは

【親ウィンドウ】
<form action="xxx.php" method="POST" name="myForm">
顧客コード
<input type="text" name="kokyaku_cd" size="10">
<a href="javascript:void(0)" onClick="window.open('search.html','search','menubar=no,height=400,width=300');">検索</a>
</form>

【子ウィンドウ】
<script language="javascript"><!--
function ich(n) {
window.opener.document.myForm.kokyaku_cd.value=n;
window.close();
}
//--></script>

<table>
<tr>
<th>顧客コード</th>
<t...続きを読む

QサブウィンドウのFORM内データを親ウィンドウにPOSTしたい

お世話になってます。

現在、社内で使う掲示板を作成しているところで、
検索条件を設定するページを、window.openで小窓を作り、
そこに条件を指定してもらうように設計しています。

小窓でセレクトボックスやら、テキストボックスに入力された値を、「検索」ボタンを押す事で、POSTして親ウィンドウに渡し、親ウィンドウにその値に基づいたSQLで、記事を
絞り込み、その結果を表示するところまでやりたいのですが、
うまくいきません。

小窓の<form の actionには親ウィンドウ(index.php)を、
targetは、同じく親ウィンドウ、methodをpostにしています。

色々とネットで調べましたが、思うようなページが見つかりませんでした。
(小窓から親ウィンドウのページを色々変えたりするのは出来ますが、小窓のデータをPOSTするようなサイトがなかった・・・)

すみませんが、是非よろしくお願い致します。

Aベストアンサー

「targetは、同じく親ウィンドウ」 て、実際にはどんな文字列をいれているのでしょう?
target="_parent"とか入れても、これは、同じウィンドウ内で、フレーム分けされているときの親フレームのことですし。
フレーム分けされていないなら、target="_self"と同じ動作になります。

対策としては、JavaScriptはonの前提で
元windowのページにおいて、 body.onload か window.open 実行前か の時点で、以下を実行してwindow.nameを付けておいて、この名前をformのtargetに入れます。

ー親側スクリプトー
<body onload="window.name='oya';" >

ー子側フォームー
<form action ="index.php" method="post" target="oya">

Q子ウインドウを閉じて 親ウインドウを更新

初歩的なことなのかもしれませんが、ご教授いただけると助かります。

やりたい動作は、

親ウインドウから<a href="" target=_blank>で
子ウインドウを開きます。

子ウインドウで処理を行った後、

----ここからの動作がわかりません-----

子ウインドウ上のボタンかアンカータグで

親を再読み込み
子を閉じる
親にフォーカス

こんな動作をJAVASCRIPTで実現可能でしょうか?
結果的に、子が閉じられ、親が再読み込みされた状態でフォーカスがあたるようにできれば最高です。

暇なときでかまいませんので、どうぞよろしくお願いいたします。

Aベストアンサー

こんな感じでいいかと思います
------------------------------
<script type="text/javascript">
<!--
function p_reload(){
var pwin=window.opener;
pwin.location.reload();
pwin.focus();
window.close();
}
//-->
</script>

<button type="button" onclick="p_reload()">親を更新して閉じる</button>

Q子ウィンドウより親ウィンドウのフォームをsubmit

親ウィンドウより子ウィンドウをwindow.openにて
表示し、

parent.window.opener.document.form.コントロール名.value="111";

というふうに、子ウィンドウより親ウィンドウのコントロールに値をセットしています。これに親ウィンドウのフォームをsubmitするという処理を追加したいのですが、可能なのでしょうか??

もし可能であれば、その方法を教えてください。
よろしくお願いします!!!!

また、子ウィンドウより親ウィンドウのコントロールに値をセットした場合、親ウィンドウのonchangeイベントは発生しないようなのですが、この解消方法はないでしょうか??

よろしくお願いします!!!!

Aベストアンサー

submitは、
parent.window.opener.document.form.submit();
とすればいいです。

親ウインドウのonchangeイベントが確かに起こらないみたいですね。
子ウィンドウに(スクリプト実行中)フォーカスがあるからだと思いますが、解消する方法は、わかりません。

Q別フレームのページを更新させたい

質問させてください。
Windows IE6.1で試しています。


左右に分かれたフレームのページをつくり、
右ページにメニュー、左ページに掲示板を作っています。
左ページを更新したら、同時に右ページも更新させたいのですが、
それの方法がわかりません。

一応、下記の通り試してみましたが、更新しませんでした。

function autoOpen(){
window.open("menu.htm","menu");
}

左ページの更新時、
BODYを下記のとおり書き換えています。

<body onLoad="autoOpen()">

あと、
<body onload="parent.frames.menu.reload(true)">
も試してみましたが、やはりダメでした。

何卒宜しくお願いします。m(_ _)mペコリ

Aベストアンサー

まずは、始めまして^^

早速ですが、質問の内容を見る限り、条件として左右にフレームが分かれた状態で、双方からページを変更出来る事を実現したいと言うことでよろしいのでしょうか?
(プラスしてポップアップウィンドウも更新させたいのかな??)
以下の説明は、親ウィンドウは左に掲示板(bbs)、右にメニュー(menu)、ポップアップウィンドウ(popup)でもメニューを表示するとして説明させて頂きます。


初めにフレーム間の操作についてですが、質問に最後に書かれている次の文は非常に惜しいですね
parent.frames.menu.reload(true)
非常に惜しいのですが、これでは多分エラーが発生してしまうと思います。

一つ記述を忘れている為に、発生しているエラーなのですが、その記述とは、「location」です。

日本語で訳すと、parent(親)の[frames(宣言されているフレーム中)]で「menu(menuと言うフレーム)」の「location(現在位置)」を「reload(更新)」してあげるのです。

つまり、以下の文に直せば上手く行ってくれると思います。(menu=フレーム右側、このScriptは掲示板ページから実行する物とします)

parent.frames.menu.location.reload(true)

付け加えて書いておきますが、framesは記述しない以下の文でも同様の動作をしてくれます。

parent.menu.location.reload(true)


次にポップアップウィンドウから親ウィンドウ内を操作する方法ですが、今回は親ウィンドウはフレーム単位で左右に分割されていると言うことなので、ポップアップウィンドウから一部のフレームを操作するのは、少し複雑になります。
以下に最初に説明した親フレームのmenuを更新するのと同様の動作をする例を書いてみますね^^
(この例ではポップアップウィンドウから親フレームのmenuフレームを更新します)

opener.menu.location.reload(true);

これで、ポップアップウィンドウからもmenuを更新することが出来ました。

以上で解説を終わります。
参考になったか分かりませんが、ホームページ作り、頑張ってください p(^-^)q

まずは、始めまして^^

早速ですが、質問の内容を見る限り、条件として左右にフレームが分かれた状態で、双方からページを変更出来る事を実現したいと言うことでよろしいのでしょうか?
(プラスしてポップアップウィンドウも更新させたいのかな??)
以下の説明は、親ウィンドウは左に掲示板(bbs)、右にメニュー(menu)、ポップアップウィンドウ(popup)でもメニューを表示するとして説明させて頂きます。


初めにフレーム間の操作についてですが、質問に最後に書かれている次の文は非常に惜しいですね
...続きを読む

Q配列をPOSTで受けとる

タイトルのまんまですが
配列をformで送って
それをPOSTで受け取りたいのですが
うまくいきません

具体的に言うと
<?php
print"<form method=POST action=action.php>";

for($i=0; $i<$n; $i++){
   print"<input type=text name=foo[$i]>";
}
print"<input type=hidden name=n value=$n>";
print"<input type=submit value=go>";
print"<form>";
?>


///////////以下action.php//////////////////
<?php
$n = $_POST["n"];
for($j=0; $j<$n; $j++){
   $foo[$j] = $_POST["foo[$j]"];
   print"$foo[$j]";
}
?>


こんな感じのことがしたいのですが
うまくいきません
どうもPOSTされてないみたいでfoo[$j]はnullです
凡ミスな気がしなくもないんですが...プログラム初心者なんで↓↓
教えてください
よろしくお願いします

タイトルのまんまですが
配列をformで送って
それをPOSTで受け取りたいのですが
うまくいきません

具体的に言うと
<?php
print"<form method=POST action=action.php>";

for($i=0; $i<$n; $i++){
   print"<input type=text name=foo[$i]>";
}
print"<input type=hidden name=n value=$n>";
print"<input type=submit value=go>";
print"<form>";
?>


///////////以下action.php//////////////////
<?php
$n = $_POST["n"];
for($j=0; $j<$n; $j++){
   $foo[$j] = $_POST["foo[$j...続きを読む

Aベストアンサー

atsuGTさんこんにちは。


受け取り側は

$foo = $_POST["foo"];

とするだけで$fooに送信された配列が格納されます。


$_POST["foo[添え字]"] ではなく、
$_POST["foo"][添え字] となります。

QonClickに複数の関数を挿入する方法

初心者なのですがアニメーションの関数anime1、anime2、anime3を作成し、onClickに下記のように設定しました。
クリックするとアニメーション2つの設定ではは動くのですが、3つ目を設定すると動かなくなります。
通常はこのような設定はしないものなのでしょうか?
教えてください。
よろしくお願いします。
<INPUT type="button" value="START" onClick="anime1(), anime2()">・・・OKです。
<INPUT type="button" value="START" onClick="anime1(), anime2(),anime3()">・・・動きません。

Aベストアンサー

セミコロンでつなぐのが常道ですが、3つ以上なら
別途function化したほうが、可読性が高くなると
思います。

Qconfirm の OK、キャンセル 以外の文字を

javascript の confirm  で、OK、キャンセル以外の文字を出す方法を探しています。

「出せません」とか、「showModalDialog を使用し自作のダイアログ」とかしか見つかりません。

JavaScript だけで、出来ないものなのでしょうか?

Aベストアンサー

jQueryUIのDialogでできます。

以下のサイトの下の方に例が載っていて、そのうちDialog3の例で
OK、キャンセル以外の文字を設定しています。
http://stacktrace.jp/jquery/ui/widgets/dialog.html

Javascriptだけで実現していますが、confirmを使っていないので
質問の意図からはずれてるかもしれませんが。

QリンクでPOSTデータを送信することは可能ですか?

はじめまして。
Submitボタンを使用せずに<A>リンクでFORMのPOSTメソッドデータを送信することは可能でしょうか?
やはりURLにデータを付加して送信するしかないのでしょうか?
ご教授よろしくお願い致します。

Aベストアンサー

javascript を使えば可能です。大雑把にはこんな感じ。

・パラメータが全部 hidden な form を記述しておく(ブラウザでは表示されない)
・<a href> では、その form を submit するように javascript を記述する

試してないですけど、こんな感じ。

<form name=f method=POST action="http://どこか">
<input type=hidden name=x1 value=v1>
</form>

<a href="javascript:document.f.submit()">リンクから submit</a>

Q孫ウインドウを閉じたら親をリロード

親ページをクリックして、サブウインドウを開き、さらにサブウインドウからクリックして孫ウインドウを開きました。
孫を閉じた時点(またはサブウインドウをリロードした時点でもよい)で、親ウインドウをリロードするにはどうしたら良いでしょうか。

孫閉じる→サブウインドウリロード→親ウインドウリロードを、孫をクリックしたことにより行いたい。

それぞれのページは不特定で、固定のURLはありません。

Aベストアンサー

孫ウィンドウのページ内に、以下のスクリプトを仕掛ければ、良いのではないかと思います。

window.opener.opener.location.reload();

これで、孫ウィンドウから見たopener(子ウィンドウ)の、更にそのopener(親ウィンドウ)に対してリロードをかけることができると思います。

ただ、ご質問の内容から見ると、孫ウィンドウが閉じた時に子ウィンドウがリロードされる仕掛けと、子ウィンドウがリロードされた時に親ウィンドウがリロードされるという仕掛けを入れておいて、孫ウィンドウから子ウィンドウをリロードし、子ウィンドウから親ウィンドウをリロードするという、連鎖的なアクションでも良いかもしれませんね。
こういったアクションでよければ、以下のソースを、子ウィンドウと孫ウィンドウに読み出すそれぞれのHTMLファイルに追加してみてください。

<script type="text/javascript"><!--
function refresher(){
if (window.opener){
window.opener.location.reload();
}
}

window.onunload=refresher;
//--></script>

このスクリプトでは、window.onunloadでページがアンロードされたイベント(リロードやページ移動、ウィンドウを閉じるなどで現状のページが破棄された時)を拾い、指定の処理を実行します。 ここではrefresher()という、親ウィンドウをリロードする関数を指定しています。
これを子ウィンドウ内のHTMLと孫ウィンドウ内のHTMLに仕掛けておけば、子ウィンドウをリロードしたタイミングでも、孫ウィンドウを閉じたタイミングでも、子ウィンドウと親ウィンドウのリロードがかかると思います。

とりあえず、手元で確認した分では、IEとNetscapeでは、期待通りの動作になってくれるのではないかと思います。
参考になれば…

孫ウィンドウのページ内に、以下のスクリプトを仕掛ければ、良いのではないかと思います。

window.opener.opener.location.reload();

これで、孫ウィンドウから見たopener(子ウィンドウ)の、更にそのopener(親ウィンドウ)に対してリロードをかけることができると思います。

ただ、ご質問の内容から見ると、孫ウィンドウが閉じた時に子ウィンドウがリロードされる仕掛けと、子ウィンドウがリロードされた時に親ウィンドウがリロードされるという仕掛けを入れておいて、孫ウィンドウから子ウィンドウをリロ...続きを読む


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング