こんにちは。

表題のように、Window.Openをモーダルにしたいのです。

親フォームからサブフォームを開き、
そこでクリックで選択された値を親フォームに展開させる
という処理をしたいのです。

ShowModalDialogだと、そのサブフォームで入力された値を親フォームに表示することができないのではないか・・・と思っています。

どなたかいい方法をご存知の方、
どうか教えてください。
よろしくお願いします。

A 回答 (2件)

> ShowModalDialogだと、そのサブフォームで入力された値を親フォームに表示することができないのではないか



IE依存でかまわない、ということですね。

showModalDialog() は、表示したダイアログから、戻り値を返すことができます。

ダイアログの方では、window.returnValue という window オブジェクトの
プロパティがあるので、これに値を設定します。

親の方では、

ret = showModalDialog(…);

として、その値を受け取ります。

複数の数値のやり取りがあるのであれば、その window.returnValue に設定
するものを Object や Array にすれば良いですね。


因みに表題の

> Window.Openをモーダルにしたい

はやめておいた方が良いです。

あるウィンドウを常に一番上に表示することは可能ですが、そのウィンドウが
複数あると破綻します。

モーダルなウィンドウが、動作として必要なのであれば、新しくウィンドウを
開くのではなく、切り替えるようにインターフェースを考え直すべきだと
思います。

# もしくは applet を作るか
    • good
    • 0
この回答へのお礼

a-kuma殿。

ありがとうございます!
教えていただいたとおりやったら、
バッチリでした。
複数の値を返したいので、配列を使います!!

助かりました。ありがとうございました。
また何かありましたら、よろしくお願いします。

お礼日時:2001/09/19 13:02

私はサブウィンドウ自身がblurになった時Focusするようにしてます。


値の移送はopener.***.valueでやってます。
    • good
    • 1
この回答へのお礼

xruz殿。

ありがとうございました。
その方法でやっていたのですが、
私の場合はうまくいきませんでした。
たぶん、どっかおかしかったのですね・・・。

お礼日時:2001/09/19 13:05

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

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

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

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

Q親フォームとサブフォームでの値の渡し方

入力フォームに部門名(textbox)を入れる項目があります。
部門名を入れるには参照ボタンを押してサブフォームを開きます。
サブフォームにはDBから引っ張ってきた部門一覧が表示されます。
このなかから該当する部門を選び「選択」ボタンを押します。
ここで、親フォームの部門名(text)に値を設定する方法として
javascriptを使用し下記のように記述しています。
window.opener.document.forms[0].bumon.value=選択した部門名;
問題なのが、もし親フォームでメニューに戻ってしまっていて
サブフォームの「選択」ボタンを押されたときです。
当然、親フォームには部門名(textbox)がないのでスクリプトエラーに
なります。
親フォームに「部門名(textbox)」が存在するかどうかチェック、又は
スクリプトエラーがでないようにする方法はありますでしょうか?
WEBではポップアップはあまり開かない方が良いと聞きますが
仕様なのでこの実装できくしかありません。

Aベストアンサー

(1)親ページにfocusが移った場合もしくはunload時に
サブフォームを閉じる。
(2)サブフォームからopener.herf.locationを見て
想定されるページではない場合はエラー処理をいれる。
(3)サブウィンドウのonBlur時に、自分にfocusを戻すか、自分を閉じる
(4)IEに限定していいなら(?)モーダルダイアログをつかう。

などあります

Qサブフォームから親フォームへのデータの受け渡し

いつもお世話になっております。

今phpとmysqlで簡単なwebアプリケーションを作成しているのですが、ちょっと分からないことがあります。

親フォームのボタンからサブフォームを開いて、サブフォームのデータを親フォームに受け渡すのはjavascriptで行うのでしょうか?
その場合どのような形で行うのでしょうか?

あまりjavascriptは詳しくないのでこのカテゴリであっているのかすら分からないのですが、かなり困っています。よろしくお願いいたします。

Aベストアンサー

色んなやり方がありますが、とりあえずこれを参考にどうぞ。(JavaScriptです)
http://www.openspc2.org/reibun/javascript/window/027/index.html

参考URL:http://www.openspc2.org/reibun/javascript/window/027/index.html

Qフォームの値の、親→子→親への受け渡し

mysql, php, そしてjavascriptを用いて、「親画面で品名のキーワードを入力後、検索ボタンを押すと、子画面が開き、検索結果が一覧表で表示される。表から、目的の品名を選び、選択ボタンを押すと、当該品名と識別番号が親画面に戻され、子画面は閉じられる。」というシステムを作りたいと思っています。
当サイトの過去の投稿を参考にさせて戴きながら、下記のようなコードを書いたところ、親画面でキーワードを入力し、子画面で検索結果が表示されるところまでは問題なく動作しますが、子画面で選択ボタンを押すと、親画面の品名や識別番号の入力欄には「[object HTMLInputElement]」という文字が表示されるだけで、子画面に標示されている検索結果が反映されぬまま、子画面が閉じられてしまいます。
何がいけないのか、どなたかご指摘くださると幸いです。
宜しくお願い致します。

----------------------

【親(parent.html)】

<!DOCTYPE html>
<html>
<head>
<title>親画面</title>
<meta charset="utf-8">
<script type="text/javascript">
function open_child() {
window.open("about:blank","child","width=400,height=300");
document.form_goods.target = "child";
document.form_goods.method = "post";
document.form_goods.action = "child.php";
document.form_goods.submit();
}
</script>
</head>
<body>
<form action="" method="post" name="form_goods">
識別番号:<input type="hidden" name="goods_id" id="goods_id">
品名:<input type="text" name="goods_name" id="goods_name">
<input type="submit" name="submit" value="検索">
</form>
</body>
</html>

--------------------

【子(child.php)】

<?php
$pdo = new PDO('mysql:host=host;dbname=database;
  charset=utf8','user','password',
[PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC]);
$key_word = $_POST['goods_name'];
$like_key_word = "%".$key_word."%";
$sql = "SELECT * FROM goods WHERE goods_name LIKE '$like_key_word'";
$stmt = $pdo -> qery($sql);
while($row = $stmt -> fetch()){
  $rows[] = $row;
}
?>

<!DOCTYPE html>
<html>
<head>
<title>子画面</title>
<meta charset="utf-8">
<script type='text/javascript'>
function send_to_parent() {
if(!window.opener || window.opener.closed) {
window.close();
} else {
var element1 = window.opener.document.getElementById('goods_id');
var element2 = window.opener.document.getElementById('goods_name');
element1.value = document.getElementById('id');
element2.value = document.getElementById('name');
window.close();
}
}
</script>
</head>
<body>

<table border='1'>
<tr><th>識別番号</th><th>品名</th></tr>
<?php foreach($rows as $row){?>
<tr>
<td><?=$row['goods_id']?></td>
<td><?=htmlspecialchars($row['goods_name'],ENT_QUOTES,'UTF-8')?></td>
<form method='post' action='' name='form_result'>
<td><input type='hidden' name='id' id='id' value="<?=$row['goods_id']?>">
<input type='hidden' name='name' id='name' value="<?=$row['goods_name']?>">
<input type='submit' name='input' value='選択' onClick='send_to_parent()'>
</td>
</form>
</tr>
<?php }?>

</body>
</html>

mysql, php, そしてjavascriptを用いて、「親画面で品名のキーワードを入力後、検索ボタンを押すと、子画面が開き、検索結果が一覧表で表示される。表から、目的の品名を選び、選択ボタンを押すと、当該品名と識別番号が親画面に戻され、子画面は閉じられる。」というシステムを作りたいと思っています。
当サイトの過去の投稿を参考にさせて戴きながら、下記のようなコードを書いたところ、親画面でキーワードを入力し、子画面で検索結果が表示されるところまでは問題なく動作しますが、子画面で選択ボタンを押...続きを読む

Aベストアンサー

ああ、よくみると相当グダグダですね
まずforeachでまわしているのでidがユニークじゃなくなりますね
これはhtml的にNGです
それとformを入れるなら<td>の内側です
また子winからサブミットする必要はありません

たとえばこうしておいて
<?php foreach($rows as $key=>$row){?>
<tr>
<td><?=$row['goods_id']?></td>
<td><?=htmlspecialchars($row['goods_name'],ENT_QUOTES,'UTF-8')?></td>
<td>
<form>
<input type='hidden' name='id' value="<?=$row['goods_id']?>">
<input type='hidden' name='name' value="<?=$row['goods_name']?>">
<input type='button' value='選択' onClick='send_to_parent(this.form)'>
</form>
</td>
</tr>
<?php }?>

スクリプトはこんな感じでどうでしょ?
<script>
function send_to_parent(f) {
if(!window.opener || window.opener.closed) {
window.close();
} else {
var element1 = window.opener.document.getElementById('goods_id');
var element2 = window.opener.document.getElementById('goods_name');
element1.value = f.elements["id"].value;
element2.value = f.elements["name"].value;
window.close();
}
}
</script>

ああ、よくみると相当グダグダですね
まずforeachでまわしているのでidがユニークじゃなくなりますね
これはhtml的にNGです
それとformを入れるなら<td>の内側です
また子winからサブミットする必要はありません

たとえばこうしておいて
<?php foreach($rows as $key=>$row){?>
<tr>
<td><?=$row['goods_id']?></td>
<td><?=htmlspecialchars($row['goods_name'],ENT_QUOTES,'UTF-8')?></td>
<td>
<form>
<input type='hidden' name='id' value="<?=$row['goods_id']?>">
<input type='hidden' name='name' value...続きを読む

Qサブウィンドウから親ウィンドウのフォームへの書き込み

よろしくお願いします。
やりたい事は
サブウィンドウを開いて
サブウィンドウのテキストボックスに入力した内容を
親ウィンドウのテキストボックスに書き込みたいのです。
以下親ウィンドウ(oya.html)
<html>
<head>
<script type="text/javascript">
<!--
function search(){
window.open( 'sub.html' ,'childwin', "width=350,height=250,location=no,menubar=no,toolbar=no,resizable=yes,scrollbars=yes" );
}
-->
</script>
</head>
<body>
<form name="mainform" method="POST" action="hoge.php">
<TABLE border="1">
<TR>
<TD>A:<INPUT type="text" name="A" id="A"></TD>
</TR>
<TR>
<TD>B:<INPUT type="text" name="B" id="B"></TD>
</TR>
<TR>
<TD><input type="button" onclick="search();return false;" value="サブウィンドウ"></TD>
</TR>
<TR>
<TD><center><input type="submit" name="exec" value="確認"></center></TD>
</TR>
</TABLE>
</form>
</body>
</html>

以下サブウィンドウ(sub.html)
<html>
<head>
<script type="text/javascript">
<!--
-->
</script>
</head>
<body>
<form name="subform">
<TABLE border="1">
<TR>
<TD>A:<INPUT type="text" name="A" id="A"></TD>
</TR>
<TR>
<TD>B:<INPUT type="text" name="B" id="B"></TD>
</TR>
<TR>
<TD><input type="button" value="入力"></TD>
</TR>
</TABLE>
</form>
</body>
</html>
以上です。親ウィンドウの中にformが入れ子状態になってしまうため
javascriptで対応できないのかと思い質問させて頂きました。
ご教示お願いいたします。

よろしくお願いします。
やりたい事は
サブウィンドウを開いて
サブウィンドウのテキストボックスに入力した内容を
親ウィンドウのテキストボックスに書き込みたいのです。
以下親ウィンドウ(oya.html)
<html>
<head>
<script type="text/javascript">
<!--
function search(){
window.open( 'sub.html' ,'childwin', "width=350,height=250,location=no,menubar=no,toolbar=no,resizable=yes,scrollbars=yes" );
}
-->
</script>
</head>
<body>
<form name="mainform" method="POST" action=...続きを読む

Aベストアンサー

>>> 親ウィンドウの中にformが入れ子状態になってしまうため
javascriptで対応できないのか

oya.html と sub.html は、別のページなので入れ子にはなりません。

参考までに、sub.html に

------------------------------------------------------------
<!--
function setOpener() {
opener.document.mainform.A.value = document.subform.A.value;
opener.document.mainform.B.value = document.subform.B.value;
}
-->

...

<tr>
<td>
B:
<input type="text" name="B" id="B">
</td>
</tr>
<tr>
<td>
<input type="button" value="入力" onclick="setOpener()">
</td>
</tr>
</table>
...

------------------------------------------------------------
と記入してみてください。

>>> 親ウィンドウの中にformが入れ子状態になってしまうため
javascriptで対応できないのか

oya.html と sub.html は、別のページなので入れ子にはなりません。

参考までに、sub.html に

------------------------------------------------------------
<!--
function setOpener() {
opener.document.mainform.A.value = document.subform.A.value;
opener.document.mainform.B.value = document.subform.B.value;
}
-->

...

<tr>
<td>
B:
...続きを読む

Q親ウィンドウで動的に作成した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', '');">
=====================サブウィンドウ側 ここまで=====================

QNo.4132708 複数のボタンに対するActionと動的hiddenについて
で皆様に色々とアドバイスを頂いたものです。

しかし根本的な解決には至らず、また、皆様のお知恵を頂きたく
思います。

現在の問題点としてはサブウィンドウ側でtarget属性とname属性の
削除をonload時に行おうとしていますが、Firefoxだとうまくいき、
IE6だとうまくいかないことまではわかりました。

IE6でもうまくいくようにするにはどうしたらよいか
お知恵をいただければ幸いです。

IEだとremoveChildがうまくいかないような...続きを読む

Aベストアンサー

少し整理してみた。

<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();
}

少し整理してみた。

<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 = '_s...続きを読む


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

人気Q&Aランキング

おすすめ情報