ここから質問投稿すると、最大4000ポイント当たる!!!! >>

こんにちは。

表題のように、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モーダルダイアログウィンドウの改修方法

現在メンテナンスを担当しているWebアプリが
モーダルダイアログウィンドウ(showModalDialog)を多用しています。

このシステムは画面は jsp と javascript で、後ろはJavaです。


特に、伝票の入力処理では各行の商品IDを入力するときにモーダルダイアログウィンドウ
が開いて商品一覧が表示され、その中から商品を選択すると親画面に戻って商品情報が
表示される、という仕組みになっています。

親画面自体は開かれたままなので、画面遷移の考慮をしないで済む、という点では
シンプルなプログラムになっています。

ところがこの「showModalDialog()」、ブラウザによって若干挙動が異なったり、
将来廃止されるらしい、とのことで改造を迫られています。

モーダルダイアログウィンドウを使わない設計がいいとは思うんですが、
どのような仕組みに変えた方がよいでしょうか。

例えば画面遷移で商品を選択して戻るような仕組みにすると、途中まで入力した伝票情報を
すべて保持したまま遷移しなければなりません。

どのような仕組みがよいかご意見をお願いします。

現在メンテナンスを担当しているWebアプリが
モーダルダイアログウィンドウ(showModalDialog)を多用しています。

このシステムは画面は jsp と javascript で、後ろはJavaです。


特に、伝票の入力処理では各行の商品IDを入力するときにモーダルダイアログウィンドウ
が開いて商品一覧が表示され、その中から商品を選択すると親画面に戻って商品情報が
表示される、という仕組みになっています。

親画面自体は開かれたままなので、画面遷移の考慮をしないで済む、という点では
シンプルなプログラムになって...続きを読む

Aベストアンサー

以下サンプルとして超雑にかいておきます。
あくまでフローをみるサンプルなのではしょっているので
そのままでは実用には耐えないと思います
(たぶんjQueryあたりを使えばもう少しらくにいけるとおもいます)

<html>
<head>
<script>
function test(){
var list={"":"選んでね!","x":"x","y":"y","z":"z"};
var nWin=document.createElement("div");
nWin.id="nWin";
var n=document.createTextNode("test");
nWin.appendChild(n);

var s=document.createElement("select");
for(var i in list){
var o=document.createElement("option");
o.setAttribute("value",i);
o.appendChild(document.createTextNode(list[i]));
s.appendChild(o);
}
s.onchange=function(){
document.getElementById("hoge").value=this.value;
nWin.parentNode.removeChild(nWin);
};
nWin.appendChild(s);

document.getElementsByTagName("body")[0].appendChild(nWin);
}
</script>
<style>
#nWin{
height:300px;
width:300px;
background-Color:red;
z-index:2;
position:absolute;
top:100px;
left:100px;
}
.testarea{
width:100%;
height:100px;
}
.yellow{background-Color:yellow;}
.lime{background-Color:lime;}
.aqua{background-Color:aqua;}
</style>
</head>
<body>
<div class="testarea yellow">test</div>
<div class="testarea lime">
<input type="text" name="hoge" id="hoge">
<input type="button" value="test" onclick="test()">
</div><div class="testarea aqua">test</div>
</body>

nWinをwindow.openで処理しても同じような感じになると思います

以下サンプルとして超雑にかいておきます。
あくまでフローをみるサンプルなのではしょっているので
そのままでは実用には耐えないと思います
(たぶんjQueryあたりを使えばもう少しらくにいけるとおもいます)

<html>
<head>
<script>
function test(){
var list={"":"選んでね!","x":"x","y":"y","z":"z"};
var nWin=document.createElement("div");
nWin.id="nWin";
var n=document.createTextNode("test");
nWin.appendChild(n);

var s=document.createElement("select");
for(...続きを読む

Q子ウィンドウを常に手前表示、親ウィンドウは操作させない

まず親ウィンドウから、子ウィンドウを新しく開きます。
そして、子ウィンドウを常に手前で表示させて、親ウィンドウは触れない、というPAGEを作成したいのですがわかりません。
どなたか教えてください。

Aベストアンサー

「モーダル」で検索してみてください。

1度ひらいた子ページを閉じるまで他のページの操作をできなくされることを言います。

ちなみに逆は「モーダレス」です。

Q子ウィンドウの存在確認

子ウィンドウが開いていない場合にのみ子ウィンドウを開くような下記の処理があるとします。

function OpenSubWindow()
{
if(!w.closed()){
alert('閉じろ!');
}else{
w = window.open("a.html","sub","resizable=no,scrollbars=no");
}
}

この場合、当然のことですが、変数wはelseの中で初めて初期化されるため、ifの条件でオブジェクトが存在しないことによりエラーが発生します。

でも、"sub"というname属性のウィンドウが開いているかどうかを確認したいのですが、どうすればよいのでしょうか?wを初期化する方法が何かあるのでしょうか?それとも、subウィンドウのopen/closeの状態を管理するロジックを作りこまないといけないのでしょうか?

Aベストアンサー

細かなロジックを考える必要はありませんよ。
w がオブジェクトかどうか分からない時点で w.closed を評価するのがマズイだけですから、評価の順番を変えればいいんです。

var w;
function OpenSubWindow() {
  if (!w || w.closed)
    w = window.open("a.html", "sub", "resizable=no,scrollbars=no");
  else
    alert("閉じろ!");
}

ちなみに closed はメソッドではなくプロパティですので、w.closed() ではエラーとなります。
また、既に開いているときの処理は
  w.focus();
とすれば子ウィンドウがアクティブになるのでオススメです。

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

Qwindow.openで値の渡し方を教えてください。

画像をクリックするとwindow.htmlで新しいウインドウが開き、「IMG/AAA.jpeg」という値をwindow.htmlに渡して、画像を表示したいのですが、どのようにすればよいでしょうか。

画像をクリック(photoOpnに値が渡される)→関数photoOpn実行(window.htmlに値が渡される)→window.html表示(値を受け取り画像を表示)といった具合にしたいのですが・・・。

<html>
<head>
<script type="text/javascript"><!--
photoOpn(value){
window.open("window.html");
}
//--></script>
</head>

<body>
<a href="javascript:photoOpn('IMG/AAA.jpeg')"><img src="IMG/AAA.jpeg"></a>
</body>

ここまではやってみたのですが、window.htmlにどのように値を渡せばいいのでしょうか。

Aベストアンサー

>>1
> 結構複雑になってしまいますね。Javascriptを勉強してまもないので
> 難しく感じてしまいます(笑)
> 図々しいとは思いますが、少しながら関数等のscriptの説明をして
> 頂けませんでしょうか。

すみませんでした。
自分でやるときもなかなかコメントつける癖がなくて暫く経ったら
自分の書いたコードさえ解読できなくなることが多々あったりします。
それでも、コメント書くのが面倒だったりそもそも適切なコメントが
思い浮かばずつい、省略してしまうことが多くて自分でも困っていたり
します。(^_^;

やっていること自体は決して複雑ではないはずなんですけど、確かに
難しいかも知れませんね。

// URL エンコード
url = encodeURIComponent(url);

これはURLエンコードしています。
クエリに非ASCII文字列などを含めるときはURLエンコードします。
スラッシュはディレクトリ区切りとしても使用されているのでURLと
しては使用可能ですが念のためにURLエンコードしています。
因みにJavaScriptにはURLエンコードする関数がいくつかありますが
スラッシュをエンコードできるのは上記の関数のみのようです。
また、日本語などの文字列が含まれる場合、元の文字列が何であっても
強制的にUTF-8としてURLエンコードしてしまいますのでご注意ください。

window.open('window.html?url=' + url);

これはそのまま、URLにクエリを追加して渡しているだけです。

var query = location.search.substr(1).split('&');

ここが一番分かりにくい可能性がありますが

location.search

はURLのクエリの部分(?含む)を文字列オブジェクトとして返します。

.substr(1)

は1文字目(?を飛ばす)移行を取得しています。

.split('&')

は '&' を区切りとして分割し配列として返します。
(念のため複数のクエリが渡されたときを考慮して)

var base = './';

これは画像ファイルのURLパスです。
相対パスと絶対パスどちらも指定できます。
最後は必ずスラッシュで終わってください。

if(query != '') {

これはクエリがから文字列でなかったらという条件文です。
この条件に一致したらこれ以降のブロックを実行します。

var req = new Array();
for(var i = 0; i < query.length; i++) {
var key = query[i].split('=');
req[decodeURIComponent(key[0])] = decodeURIComponent(key[1]);
}

ここは、各クエリを連想配列に代入しています。
ここはPerlCGIなどで使用されている部分をそのままJavaScriptに
移植してみました。
代入するときにキーと値の両方をURLデコードしています。

var img = document.createElement('img');
img.setAttribute('src', base + req['url']);
document.getElementById('img').appendChild(img);

ここは img エレメントを作成し、 'img' のIDをもつエレメントの
子要素として作成した img エレメントを追加しています。

あと、うっかり忘れていて説明している段階で気がついたのですが
上記のコードの前に req['url'] があるかどうか調べないとエラーが
でる可能性が...。

説明が下手なので却って分かりにくいかも知れませんがご了承ください。
かくコード部分の詳細はネットで調べた方が早くてもっと分かりやすく
説明している所があると思いますよ。
(そもそも上記はほとんどネットから集めた情報を組み合わせただけ
ですので)

>>1
> 結構複雑になってしまいますね。Javascriptを勉強してまもないので
> 難しく感じてしまいます(笑)
> 図々しいとは思いますが、少しながら関数等のscriptの説明をして
> 頂けませんでしょうか。

すみませんでした。
自分でやるときもなかなかコメントつける癖がなくて暫く経ったら
自分の書いたコードさえ解読できなくなることが多々あったりします。
それでも、コメント書くのが面倒だったりそもそも適切なコメントが
思い浮かばずつい、省略してしまうことが多くて自分でも困っていたり
しま...続きを読む

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別ファイルのfunctionの読み込み方

こんにちは
外部ファイル hello.js
-----------------------------
function aisatsu(){
var aa="hello"
}
-----------------------------
というファイルが存在した時にjikkou.htmlでaaの値、”hello”を呼び込みたい場合はどう記述すればよいのでしょうか?htmlのなかでaisatsu()をどこに記述していいのか分かりません。どうか教えてください。ただ、hello.jsのほうは実際の記述を簡略化したものであるのでそちらのほうはいじれません。

宜しくお願いします。

必要ないかもしれませんが、念のために私が最初に書いたhtmlの文です(もちろん実行できませんでした)
------------------------------------
<html>
<script language="javascript" src="hello.js">
aisatsu(){
document.write(aa);
}
</script></html>
------------------------------------

こんにちは
外部ファイル hello.js
-----------------------------
function aisatsu(){
var aa="hello"
}
-----------------------------
というファイルが存在した時にjikkou.htmlでaaの値、”hello”を呼び込みたい場合はどう記述すればよいのでしょうか?htmlのなかでaisatsu()をどこに記述していいのか分かりません。どうか教えてください。ただ、hello.jsのほうは実際の記述を簡略化したものであるのでそちらのほうはいじれません。

宜しくお願いします。

必要ないかもしれませんが、念のために...続きを読む

Aベストアンサー

function内で「var」をつけて変数を宣言するとfunction外からその変数の内容を取得することができなくなります。(returnで参照することはできます。)
なので変数の内容を取得する場合は「hello.js」の内容を

function aisatsu(){
var aa="hello";
return aa;
}

このように修正し、

<script language="javascript" src="hello.js"></script>
<script language="javascript">
var data=aisatsu();//「aisatsu()」関数の「aa」変数内のデータを引っ張り出す(return aa;)
document.write(data);//書いたり
alert(data);//アラートしたり
window.status=data;//ステータスバーに表示したり・・
</script>

Qウィンドウの2重起動を防止したい

こんにちわ!

javaScriptからwindow.open()でサブウィンドウを
開いている状態で、再度リンクをクリックした場合は
なにもしないようにしたいのですが、現在は、しかたなく
開かれているサブウィンドウに再度同じページを表示
するようにしています。

もし、現在サブウィンドウが開かれている場合は
親ウィンドウのリンクをクリックしても無効とする
方法があれば教えて下さい.

Aベストアンサー

window.open() の戻値を使えば可能です。

# スクリプト部
var newwin;
function openWindow(a) {
  if (!newwin || newwin.closed) {
    newwin = window.open(a.href, a.target, "~");
  else
    newwin.focus();
  return false;
}

# タグ部
<a href="xxx.html" target="newwin" onClick="return openWindow(this)">~</a>

最初は newwin に値が入っていないので、!newwin が成り立ち、if 文の中の window.open() が実行されます。

2回目以降は !newwin は常に偽となり、2個目の条件 newwin.closed が評価されます。
.closed は、ウィンドウが開いていれば false となり、閉じられていれば true となります。
つまり、開いていれば else 側が実行され、閉じられていたら再度 open するわけです。

window.open() の戻値を使えば可能です。

# スクリプト部
var newwin;
function openWindow(a) {
  if (!newwin || newwin.closed) {
    newwin = window.open(a.href, a.target, "~");
  else
    newwin.focus();
  return false;
}

# タグ部
<a href="xxx.html" target="newwin" onClick="return openWindow(this)">~</a>

最初は newwin に値が入っていないので、!newwin が成り立ち、if 文の中の window.open() が実行されます。

2回目以降は !newwin は常に偽となり...続きを読む

Q特定のウィンドウ名を持つウィンドウの有無を判別

お世話になります。

現在、以下のスクリプトでPageA.htmlのボタンをクリックすると
新ウィンドウを開きPageB.jspを表示し、PageA.htmlは閉じます。
/* PageA.html */
function submitPageB(){
// "WindowB"が既に存在する場合は閉じる
var dummy = window.open("","WindowB","");
dummy.close();

// 待ち受けページを開く
var win = window.open("NowLoading.html","WindowB","width=800,height=600,scrollbars=no,resizable=no");

// WindowBにpost形式でパラメータ送信
with(window.document.formA){
action="PageB.jsp";
method="post";
target="WindowB";
submit();
}

//PageA.htmlを閉じる
window.close();
}

これを"WindowB"が存在するか判別して
"WindowB"がなければそのまま開く、
"WindowB"があればconfirmで新たに開くか開かないかを
選択させるようにしたいのですが、
"WindowB"というウィンドウ名のウィンドウを
取得する方法がわからないため実現できません。

var blWin = true;//※ここで"WindowB"が存在するかどうかを取得したい

if(!blWin || confirm("既に開いています。新たに開きますか?")){
submitPageB();
}

特定のウィンドウ名のウィンドウの有無を知る方法、
あるいは上記のことを実現させるよい案はないでしょうか?

よろしくお願いします。

お世話になります。

現在、以下のスクリプトでPageA.htmlのボタンをクリックすると
新ウィンドウを開きPageB.jspを表示し、PageA.htmlは閉じます。
/* PageA.html */
function submitPageB(){
// "WindowB"が既に存在する場合は閉じる
var dummy = window.open("","WindowB","");
dummy.close();

// 待ち受けページを開く
var win = window.open("NowLoading.html","WindowB","width=800,height=600,scrollbars=no,resizable=no");

// WindowBにpost形式でパラメータ送信
with(window.document.f...続きを読む

Aベストアンサー

できないと思います。

Qブラウザの×ボタン(閉じるボタン)押下時のイベントをひろいたい

javaScriptでブラウザの閉じるボタン(×ボタン)を押したときに、functionを走らせたいのですがうまくいきません。onunloadで以下の処理を行っています。


if(event.clientX <= -8980 && event.clientY <= -9000 || event.clientX >= 32700 && event.clientY >= 32700) {
 //ブラウザ閉じられたときの処理
}
閉じるボタンを押してなくても走ってしまったり、不安定なのですが、×ボタン押下時のイベントの拾い方をどなたかご教授ください。よろしくお願いします。

Aベストアンサー

すでにお気づきかも知れませんが、下記URLの掲示板にヒントが載ってました。
WSH利用者さんのソースが、なかなか良いみたいです。

-- 以下、引用 --
function window.onbeforeunload() {
  if(((event.clientX > document.body.clientWidth) && (event.clientY<0)) || event.altKey){
    閉じたときの処理();
  }
}
-- --

参考URL:http://forums.microsoft.com/MSDN-JA/ShowPost.aspx?PostID=559017&SiteID=7


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

人気Q&Aランキング