親ウィンドウと子ウィンドウの間でデータを共有したいと思い、下記のソースを作成しました。
親ウィンドウで任意の文言を入力し、子ウィンドウを開くをクリックすると、子ウィンドウに値が渡されます。
子ウィンドウで任意の文言を入力し、値をセットをクリックすると、親ウィンドウに値が渡されます。
しかし親ウィンドウから子ウィンドウで値を渡した後、任意の文言を入力し送信ボタンを押すと、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>
以上、よろしくお願いします。
No.1ベストアンサー
- 回答日時:
なんだかよくわかりませんが、index.phpが出力するHTMLにwindow.onloadの処理を書かなければ良いんじゃないでしょうか。
この回答への補足
この回答へのお礼の3のindex.phpよりsub.htmlを再読み込みする際は特定の値を渡し、sub.htmlのwindow.onloadの先頭で特定の値がセットされていない場合のみwindow.openerが動作しないようにする事で回避する事ができました。
以上、よろしくお願いします。
ご回答ありがとうございます。
ご指摘の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の間の現象が発生せず、意図した動作になるのではと思ったのですが、どのように実現すればよいか分からなかった為、ご質問させていただきました。
以上、よろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・チョコミントアイス
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・あなたの習慣について教えてください!!
- ・ハマっている「お菓子」を教えて!
- ・高校三年生の合唱祭で何を歌いましたか?
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・家の中でのこだわりスペースはどこですか?
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルのシート上に別のシー...
-
Javascript_submit()完了後に処...
-
VBAで任意のウインドウのサイズ...
-
ウィンドウの2重起動を防止したい
-
インタネットからPDFファイルだ...
-
ネットブラウザでリンクを新し...
-
1クリックでモーダルを開いてか...
-
子ウィンドウを常に手前表示、...
-
親ウィンドウから開いた子ウィ...
-
親ウィンドウから子ウィンドウ...
-
IE7 window.openの新ウィンド...
-
デスクトップ画面を4分割するには
-
VBの画面で、全ウィンドウを一...
-
テーブルの<trでウィンドウAを...
-
デジタル時計の時刻合わせの方...
-
マイページはどこを開くの
-
小さな表示窓の呼び方は
-
一定時間おきにアラームやポッ...
-
[Java] Edgeでのアドレスバー非...
-
PDFを(htmlのように)無限に縦...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルのシート上に別のシー...
-
Javascript_submit()完了後に処...
-
ウィンドウの2重起動を防止したい
-
VBAで任意のウインドウのサイズ...
-
VBの画面で、全ウィンドウを一...
-
ポップアップと作業ウィンドウ...
-
デスクトップ画面を4分割するには
-
ブラウザ(IE)からエクスプロー...
-
<EXCEL/VBA> OUTLOOKのウインド...
-
子ウィンドウから親ウィンドウ...
-
子ウィンドウの存在確認
-
1クリックでモーダルを開いてか...
-
JavaScriptで指定Windowを最大...
-
子ウィンドウより親ウィンドウ...
-
リンク時、親ウインドウを最前...
-
子ウィンドウを常に手前表示、...
-
ウィンドウ名からウィンドウオ...
-
window.close()で確認メッセー...
-
孫ウインドウを閉じたら親をリ...
-
ビルダーでポップアップウィン...
おすすめ情報