人生最悪の忘れ物

親ウィンドウと子ウィンドウの間でデータを共有したいと思い、下記のソースを作成しました。
親ウィンドウで任意の文言を入力し、子ウィンドウを開くをクリックすると、子ウィンドウに値が渡されます。
子ウィンドウで任意の文言を入力し、値をセットをクリックすると、親ウィンドウに値が渡されます。

しかし親ウィンドウから子ウィンドウで値を渡した後、任意の文言を入力し送信ボタンを押すと、index.phpで子ウィンドウの変更後の文言をテキスト欄の値をセットしたあと、
子ウィンドウのwindow.onloadが走って値を追加してしまいました(下記のソースは簡易的なもののため、子ウィンドウのテキスト欄には<input type="text">を使用しておりますが、
実際には<select multiple="multiple">を使用しているため、下記のような表示になります)。

1. 親ウィンドウから子ウィンドウにセットされたテキストの例
あああ

2. 子ウィンドウで変更した文言
いいい

3. 送信ボタンクリック
子ウィンドウのselectには下記が表示されます。
いいい
あああ

その為、子ウィンドウでsubmitした際は、window.onloadを抑止できれば良いと思ったのですが、具体的にどう記述すればよいかわかりませんでしたので、
アドバイスいただける方がいらっしゃいましたら、ご教示の程、よろしくお願いします。
また、window.onloadの抑止にこだわっているわけではありません。
上記の送信ボタンクリック時、子ウィンドウのselectの中が「いいい」と表示される方法があれば大丈夫です。

【親ウィンドウ(index.html)】
<script type="text/javascript">
<!--
function window_open() {
window.open('sub.html', null, 'width = 640, height = 480, scrollbars = yes')
};
//-->
</script>
</head>
<body>
<form action="index.php" method="post" name="form00" id="form00">
<a onclick="window_open()" href="javascript:void(0)">子ウィンドウを開く</a>
<br />
<input type="text" name="text00" value="" />
</form>
</body>


【子ウィンドウ(sub.html)】
<script type="text/javascript">
<!--
window.onload = function() {
if(window.opener) {
document.form01.text01.value = window.opener.document.form00.text00.value;
}
}
function Set() {
window.opener.document.form00.text00.value = document.form01.text01.value;
window.close();
}
//-->
</script>
</head>
<body>
<form action="index.php" method="post" name="form01" id="form01">
<input type="text" name="text01" />
<input type="button" onclick="Set()" value="値をセット" />
<input type="submit" value="再読込" />
</form>
</body>

以上、よろしくお願いします。

A 回答 (1件)

なんだかよくわかりませんが、index.phpが出力するHTMLにwindow.onloadの処理を書かなければ良いんじゃないでしょうか。

この回答への補足

この回答へのお礼の3のindex.phpよりsub.htmlを再読み込みする際は特定の値を渡し、sub.htmlのwindow.onloadの先頭で特定の値がセットされていない場合のみwindow.openerが動作しないようにする事で回避する事ができました。

以上、よろしくお願いします。

補足日時:2011/01/17 18:00
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

ご指摘のwindow.onloadを書かずに本件を実現する事は可能なのでしょうか?

処理の流れとしては下記となります。

1. 親ウィンドウ(index.html)

任意の文言を入力し、「子ウィンドウを開く」で子ウィンドウ(sub.html)に値を渡します。
実現方法としては、子ウィンドウ(sub.html)でwindow.onloadを記述し、
window.openerで、親ウィンドウから子ウィンドウに値を渡しています。

2. 子ウィンドウ(sub.html)

親ウィンドウから渡された文言を修正し、送信ボタンを押します。
この際、修正した文言を保持する為、index.php内で子ウィンドウのテキスト欄に値を再セットした上で、子ウィンドウを再読込しています。

3. index.php

ここまでは予定通りの動作となるのですが、この後、index.phpによる子ウィンドウ(sub.html)の再読込時にwindow.onloadが走ってしまう為、この時点では欲しくない親ウィンドウの文字が追加されてしまいます。

4. 子ウィンドウ(sub.html)

なお、上記の中で、index.phpで子ウィンドウ(sub.html)を再読み込みしているのは、子ウィンドウ内の他のところで変えたい値がある為です。

その為、例えば子ウィンドウ(sub.html)のwindow.openerは、親ウィンドウ(index.html)から開かれた場合のみ動作し、index.phpで再読込した際は動作しないように分岐させる事ができれば、3と4の間の現象が発生せず、意図した動作になるのではと思ったのですが、どのように実現すればよいか分からなかった為、ご質問させていただきました。

以上、よろしくお願いします。

お礼日時:2011/01/15 18:33

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


おすすめ情報