- ベストアンサー
子ウィンドウの複数フォームから親ウィンドウへ
はじめて投稿させていただきます。 子ウィンドウ上のform(6個)のプルダウンメニューから valueのurlを親ウィンドウに反映したいと思っています。 formが1つだけの場合は成功したのですが、 複数個になると2つ目以降のformが動作せず、 あれこれ調べて試してみましたがお手上げです。 どうぞ方法をご教示いただけますようお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
・ ファイル名ではなく、ディレクトリを含んでいるのなら、"1/1.html"のままでOKです。 >>> FireFoxでは、一度に複数のurlを取りに行っていることがアドレスバーの表示でわかります。 これは、FirefoxはOKということですか。その場合、#2の冒頭に戻って 下のコメントのほうにしてみてください。(一つずつ ) にしたがって、 function myGo(s){ window.opener.location.href = s[s.selectedIndex].value; } に替えて見てください。 >>> IE7では、「2」~「7」までのアラートが出て、urlを検出しません。 IE7では、エラーメッセージが出ていますか。(左下の!アイコンをダブルクリック) 親Windowから起動していますか。
その他の回答 (3)
- auty
- ベストアンサー率58% (284/486)
提示したファイル名をcontrolwin6.htmlとすると、 親Windowでは、たとえば、 ------------------------------------------------------------ <html> <head><title>window control3</title> <script type="text/javascript"> <!-- var win1=false; function openWin() { win1=window.open('controlwin6.html', 'newwin', 'toolbar=no, location=no, status=no, menubar=no, scrollbars=no, width=180, height=350'); } //--> </script> </head> <body> <h3>親ウィンドウのコントロール</h3> <hr /> <form> <input type="button" value="New Window" onclick="openWin()" /> </form> </body> </html> ------------------------------------------------------------ として、呼び出す必要があります。 IEとFirefoxでは動作を確認しています。もし動かない場合そのソースコードをお知らせください。 動いたら、 alert(i); は消して、サンプルでは、alert1.htmlしか使っていませんので、使用するページに全て替えて下さい。
お礼
いつもお早いご回答をありがとうございます。 当方、IE7とFireFox2で確認をおこなっています。 script、bodyともそのままコピペをしてテストしているのですが、 思ったように動作しません。 FireFoxでは、一度に複数のurlを取りに行っていることがアドレスバーの表示でわかります。 (たとえば1/2.htmlを取りに行ってすぐ2/3.htmlに切り替わる、等) alert1.htmlファイルを仮に置いてみましたが、こちらも読みに行きません。 IE7では、「2」~「7」までのアラートが出て、urlを検出しません。 たびたび恐れ入りますが、再度ソースをご覧いただいてアドバイスいただけますようお願い致します。
補足
失礼しました。文字量オーバーでてれこになってしまいましたが、以下がソースです。 どうぞ宜しくお願いします。 ■子ウィンドウ(controlwin6.html) <html> <title>Window Control</title> <script type="text/javascript"> <!-- function myGo(s){ var i = 1; var I = 7; while(i<I){ var s=document.forms['Form' + (i)].elements['Jump' + (i++)]; window.opener.location.href = s[s.selectedIndex].value; alert(i); } } //--> </script> <body> 新しいウィンドウから親のウィンドウを操作 <hr /> <form name="Form1"> <select name="Jump1" onChange="myGo(this)"> <option value="alert1.html">選択してください</option> <option value="alert1.html">1-1</option> <option value="alert1.html">1-2</option> <option value="1/3.html">1-3</option> </select> </form> <form name="Form2"> <select name="Jump2" onChange="myGo(this)"> <option value="alert1.html">2-1</option> <option value="alert1.html">2-2</option> <option value="2/3.html">2-3</option> </select> </form> <form name="Form3"> <select name="Jump3" onChange="myGo(this)"> <option value="alert1.html">3-1</option> <option value="3/2.html">3-2</option> <option value="3/3.html">3-3</option> </select> </form> <form name="Form4"> <select name="Jump4" onChange="myGo(this)"> <option value="alert1.html">4-1</option> <option value="4/2.html">4-2</option> <option value="4/3.html">4-3</option> </select> </form> <form name="Form5"> <select name="Jump5" onChange="myGo(this)"> <option value="alert1.html">5-1</option> <option value="5/2.html">5-2</option> <option value="5/3.html">5-3</option> </select> </form> <form name="Form6"> <select name="Jump6" onChange="myGo(this)"> <option value="alert1.html">6-1</option> <option value="alert1.html">6-2</option> <option value="6/3.html">6-3</option> </select> </form> </body> </html> ---------------------------------------- ■親ウィンドウ <html> <head> <script type="text/javascript"> <!-- var win1=false; function openWin() { win1=window.open('controlwin6.html', 'newwin', 'toolbar=no, location=no, status=no, menubar=no, scrollbars=no, width=180, height=350'); } //--> </script> </head> <body> <h3>親ウィンドウのコントロール</h3> <hr /> <form> <input type="button" value="New Window" onclick="openWin()" /> </form> </body> </html> 上、よろしくお願い致します。
- auty
- ベストアンサー率58% (284/486)
・ 1-2を選んで実験してみてください。 ・ ファイル名にスラッシュを使ってはいけません。 ・ <select>で最初から選んでいると、onChangeイベントが発生しません。 1番上は、[選択...]等にしたほうが良いかも知れません。 ・ 一気に6回ページを替えようとしています。(無意味かも) 下のコメントのほうにしてみてください。(一つずつ ) ------------------------------------------------------------ <html> <title>Window Control</title> <script type="text/javascript"> <!-- function myGo(s){ var i = 1; var I = 7; while(i<I){ var s=document.forms['Form' + (i)].elements['Jump' + (i++)]; window.opener.location.href = s[s.selectedIndex].value; alert(i); } } /* function myGo(s){ window.opener.location.href = s[s.selectedIndex].value; } */ //--> </script> <body> 新しいウィンドウから親のウィンドウを操作 <hr /> <form name="Form1"> <select name="Jump1" onChange="myGo(this)"> <option value="alert1.html">選択してください</option> <option value="alert1.html">1-1</option> <option value="alert1.html">1-2</option> <option value="1/3.html">1-3</option> </select> </form> <form name="Form2"> <select name="Jump2" onChange="myGo(this)"> <option value="alert1.html">2-1</option> <option value="alert1.html">2-2</option> <option value="2/3.html">2-3</option> </select> </form> <form name="Form3"> <select name="Jump3" onChange="myGo(this)"> <option value="alert1.html">3-1</option> <option value="3/2.html">3-2</option> <option value="3/3.html">3-3</option> </select> </form> <form name="Form4"> <select name="Jump4" onChange="myGo(this)"> <option value="alert1.html">4-1</option> <option value="4/2.html">4-2</option> <option value="4/3.html">4-3</option> </select> </form> <form name="Form5"> <select name="Jump5" onChange="myGo(this)"> <option value="alert1.html">5-1</option> <option value="5/2.html">5-2</option> <option value="5/3.html">5-3</option> </select> </form> <form name="Form6"> <select name="Jump6" onChange="myGo(this)"> <option value="alert1.html">6-1</option> <option value="alert1.html">6-2</option> <option value="6/3.html">6-3</option> </select> </form> </body> </html>
お礼
ご返信遅くなって失礼しました。 丁寧なご回答ありがとうございます。 ご教示いただいた通り設置して試してみましたところ、 親ウィンドウにvalueのurlが表示されると同時に 「2」というアラートと「ランタイムエラー」のアラートが出てしまいます。 1-2以外の他のページではアラートのみが出て、urlの読み込みができませんでした。 試行錯誤してみましたが、どうすればいいのかわかりません。 解決策をご教示いただけますようお願い致します。
- auty
- ベストアンサー率58% (284/486)
親ウィンドウへのアクセスを window.opener で行っていると想像すると、問題は起きそうに無いのですが、 2つだけ可能性をあげて見ます。 ・ 2番目以降のformを1のコピーにより作成したため、 何らかの原因でformとして機能していない。 ・ たとえば、window.opener.location.href に値を代入したとして、そのときの右辺の式が、2番目以降のformを反映していない。
お礼
お早いアドバイスありがとうございます。 script、body部分とも色々試しているのですが、力不足で甚だ不明です。 主に「document.formは Nullまたはオブジェクトではありません」と 「ランタイムエラーが発生しました」のアラートが表示されます。 ソースをご覧いただいてご指摘いただけるでしょうか。 <script language="javascript"> function myGo(){ var i = 1; var I = 7; while(i<I){ window.opener.location.href = document.form['Form' + (i++)].elements['Jump' + (i++)].selectedIndex.value; } } </script> <body> <form name="Form1"> <select name="Jump1" onChange="myGo()"> <option value="1/1.html">1-1</option> <option value="1/2.html">1-2</option> <option value="1/3.html">1-3</option> </select> </form> ・ ・ ・ <form name="Form6"> <select name="Jump6" onChange="myGo()"> <option value="6/1.html">6-1</option> <option value="6/2.html">6-2</option> <option value="6/3.html">6-3</option> </select> </form> </body> どうぞ宜しくお願いします。
お礼
お早いお返事ありがとうございます。 function myGo(s){ window.opener.location.href = s[s.selectedIndex].value; } にして、各メニューの最上部を「選択してください」でselectedにしたところ、 FireFox、IEとも無事に動作成功しました。 繰り返しの変数は必要ないんですね。 丁寧なご教示、心より感謝申し上げます。お蔭様で大変勉強になりました。 かじりたての若輩者の為またお騒がせすることもあるかと思いますが、 今後ともどうぞよろしくご指導いただけますようお願い申し上げます。