親ウインドウでデータを処理して、その結果だけを子ウインドウに表示します。
つまり、親が管理の画面となり、子はそれのうち必要な結果のみを見せる形です。
利用者側の状況としては、
親ウインドウ > 管理部門
子ウインドウ > 一般利用者(表示された情報を見るだけ)
という感じでそれぞれを表示します。
親から子を生成し、親がボタンを押せば子がリロードするのはうまくいきました。
しかし、親の方が管理運営するために、データの変化を常にPHP(DB)に送信するのでそのたびにリロードされます(更新状態で再描画するため)。
親からのリロード指令を受けて子は自身をリロードし、親がアクセスするDBから必要な情報だけ取得して再表示します。
問題は、親がリロードすることによって、自分の生成した子供を忘れてしまうのか、
親のリロード後に子を指定している変数(下記の"cWin")の値がなくなってしまうようで子にリロードの要求を出せなくなります。
(ブラウザエラー:cWinはNullまたはオブジェクトではありません)
>親ウインドウ
・ウインドウオープン
function childOpen{
cWin = window.open("child.html","child","width=200,height=200,resizable=1");
}
・子ウインドウリロード指示
function childReload{
cWin.location.reload()
}
ウインドウオープンの指示(Form使用)
<input type="button" value="表示" onClick="childOpen()">
子ウインドウへのリロードの指示
<input type="button" value="リロード" onClick="childReload()">
なお、変数指定時に
var cWin = "child";
としてもダメでした。
なんとか、親がリロードされても生成した子供を覚えておく、あるいは何らかの形で生成済みの子ウインドウを指定する方法はないでしょうか?
よろしくおねがいします。
なお、対象はWindowsXP+IE6で考えています。
No.1ベストアンサー
- 回答日時:
JavaScriptで作成した変数はリロードすれば最初の状態に戻ります。
アプリケーションの作りによって出来る場合、出来ない場合がありますが、私は以下の2つのどちらかを行います。
1.ウィンドウに名前をつける。
ウィンドウに名前をつければ、親はその名前で呼べば子ウィンドウを知ることができます。
var child = window.子ウィンドウの名前;
もし子ウィンドウがいっぱい出来るようなら、どこになんて名前をつけるか厳密に管理する必要があります。
2.子が親に自分を知らせる。
子ウィンドウはwindow.openerで親ウィンドウを知ることが出来ます(たとえ親がsubmitでリロードしても)。親ウィンドウに子ウィンドウをセットするような関数を作っておけば、子ウィンドウからのアクションで親ウィンドウに自分を知らせることができます。
例)
親ウィンドウ
var child;
function setChild(win) {
child = win;
}
子ウィンドウ
window.opener.setChild(window);
この方法では「子ウィンドウがfunctionを実行する」という点が難点です。親が「リロードした後」という記述があるところをみると、この方法は使えないのではないかと思います。
頑張ってください。
>var child = window.子ウィンドウの名前;
子供の名前を変数に入れるのに"window."が必要だったんですね。
うーん、こんな単純なことだったとは・・・。
すっごく助かりました。
がんばって作ってみます。
No.2
- 回答日時:
最初に、
cWin がnull または、cWin.closedの時は、開き直すようにすればいいかと思います。
if(cWin==null || cWin.closed){//開かれてない時
cWin=window.open("child.html","child","width=200,height=200,resizable=1");
}
確か、window.open は、名前が付いているウィンドウをwindow.openしようとした時は単にそのまま(新しく開かない)ので、コレで良いかと思います。
また、
Ajax的手法を使えば、親からのPHP(DB)受信時にリロードしなくて済みます。
>Ajax的手法を使えば
それ、私も考えました。
出来るだけシンプルに作りたいと思ったので今回は敬遠してたのですが、どうしてもダメならそれを試すつもりでした(^^
試すにしても、Ajaxの勉強をしないと概念しかわかってないのですが・・・。
ありがとうございました。
No.3
- 回答日時:
#1です。
もしAjaxを使うなら参考URLをご覧下さい。
私も最近知ったのですがJavaScriptを多用するならお勧めのライブラリです。
Ajax関連も入っていて、すごく簡単にクロスブラウザのAjaxを実現できました。
参考URL:http://www.imgsrc.co.jp/~kuriyama/prototype/prot …
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript clear機能を失わずにファイルアップロード機能を作成したい 3 2023/06/10 16:12
- Windows 10 ファイルエクスプローラーでフォルダを閉じる操作について 2 2022/10/15 11:06
- Chrome(クローム) 最近Win10にてブラウザが左にスッと隠れていく現象に悩まされてます 3 2023/07/22 23:11
- JavaScript ①入力フォーム→②確認表示画面→③送信完了画面のコードを書いているのです、 入力フォームから受け取っ 2 2022/05/10 16:45
- JavaScript コードレビューをお願いします。 1 2022/07/16 05:38
- その他(OS) Mac OSの操作について 2 2022/06/08 09:19
- JavaScript javascriptのちょっとした動作不良(原因は突き止めたのですが) 1 2023/06/15 19:58
- エッセイ・随筆 尋常小学校唱歌『さくら さくら』の解釈について以下のものは成立しますか?普通じゃおもろない? 7 2023/02/26 16:52
- HTML・CSS ボタンをクリックした時に、入力フォームのすぐ下部に、「入力欄が空白です」というテキストメッセージが表 1 2022/04/27 16:25
- JavaScript Javascriptが機能せず原因が分からないので教えて頂きたいです 3 2023/06/04 14:50
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
デスクトップ画面を4分割するには
-
エクセルのシート上に別のシー...
-
Javascript_submit()完了後に処...
-
VBAで任意のウインドウのサイズ...
-
ウィンドウの2重起動を防止したい
-
JavaScriptで全画面表示を行いたい
-
ブラウザ(IE)からエクスプロー...
-
子ウィンドウから親ウィンドウ...
-
インタネットからPDFファイルだ...
-
パワーポイントを複数立ち上げたい
-
Access2007では、フォームのウ...
-
エラー:アクセスが拒否されました
-
ウィンドウ名からウィンドウオ...
-
pythonで変数にオブジェクトを...
-
履歴を残さないResponse.Redire...
-
<EXCEL/VBA> OUTLOOKのウインド...
-
秀丸エディタでHTMLタグテキス...
-
新しいウィンドウが出てくるの...
-
マイページはどこを開くの
-
デジタル時計の時刻合わせの方...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルのシート上に別のシー...
-
Javascript_submit()完了後に処...
-
デスクトップ画面を4分割するには
-
VBAで任意のウインドウのサイズ...
-
ウィンドウの2重起動を防止したい
-
VBの画面で、全ウィンドウを一...
-
<EXCEL/VBA> OUTLOOKのウインド...
-
ウィンドウ名からウィンドウオ...
-
ポップアップと作業ウィンドウ...
-
1クリックでモーダルを開いてか...
-
子ウィンドウの存在確認
-
window.Openをモーダルにできま...
-
子ウィンドウから親ウィンドウ...
-
親ウィンドウから開いた子ウィ...
-
助けてGmailでボタン表示が消え...
-
JavaScriptでPDFを新規ウィンド...
-
JavaScriptで指定Windowを最大...
-
初心者javascript グーグルクロ...
-
子ウィンドウより親ウィンドウ...
-
IEでのみ発生するJavaScriptエラー
おすすめ情報