showModalDialogで画面をリロードする方法

このQ&Aのポイント
  • showModalDialogで開いた画面をonChangeでリロードする方法についてご質問です。
  • JavaScriptのメソッドを呼び出してモーダル画面を表示し、その中でカレンダーを表示しています。
  • カレンダー画面で月を変更した際にリロードする処理を作っていますが、「オブジェクトを指定してください」というエラーが出ます。解決策を教えてください。
回答を見る
  • ベストアンサー

showModalDialogで開いた画面をonChangeでリロードするには・・・

初めて投稿します。今、showModalDialogで困っています。 まず画面上のボタンからjsファイル内のJavaScriptのメソッドを呼び出し、 その中でshowModalDialogを使って開いた小さな窓にカレンダーを表示します。 このカレンダー画面には月を選択するセレクトボックスがあり、 このセレクトボックスで月を変更した際にカレンダーをリロードする 処理を作ろうとしています。しかしこのリロードで「オブジェクトを 指定してください」というエラーが出てしまいます。 何がいけないのでしょうか・・・? 処理内容はこんな感じ・・・ 1.jsファイル内のJavaScriptメソッドのshowModalDialog呼び出し部分 window.showModalDialog("modal.html"); 2.呼び出されたmodal.html内ではbodyタグを以下のようにする <body onLoad="javascript:loadPage();"> 3.2で呼び出されたmodal.html内のJavaScript、loadPage()はこんな感じ writePage()は1のjsファイル内の別のメソッド function loadPage() { writePage(); } 4.3で呼び出されたjsファイル内のJavaScript、writePage()はこんな感じ function writePage() { this.document.open(); this.document.writeln("Calendar"); this.document.writeln("<select onChange=\"javascript:loadPage();\">"); this.document.writeln("<option>1月"); this.document.writeln("<option>2月"); this.document.writeln("</select>"); }

質問者が選んだベストアンサー

  • ベストアンサー
noname#23734
noname#23734
回答No.2

test.html <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> </head> <body onload="window.showModalDialog('modal.html')"> </body> </html> modal.html <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <script language="JavaScript" src="./Calendar.js"></script> </head> <body onLoad="writePage()"> </body> </html> Calendar.js function writePage() { this.document.open(); this.document.writeln("<html><head><title></title>"); this.document.writeln('<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">'); this.document.writeln("<script language=\"JavaScript\" src=\"./Calendar.js\"></script>"); this.document.writeln("</head><body>"); this.document.writeln("Calendar"); this.document.writeln("<select onChange=\"javascript:writePage();\">"); this.document.writeln("<option>1月"); this.document.writeln("<option>2月"); this.document.writeln("</select>"); this.document.writeln("</body></html>"); } 簡単なテストでこれなら取りあえずエラーは出ないと思います。 ハッキリ言ってなぜ補足で書かれたスクリプトでエラーが出るのか不明です。 ただ、上の例では文字化けするみたいですね。(windows98 IE6) 余分なことですが、この場合下のようにした方が簡単じゃないでしょうか。 Calendar.js function writePage() { HTML = "Calendar" + "<select onChange=\"javascript:writePage();\">"+ "<option>1月"+ "<option>2月"+ "</select>" document.body.innerHTML = HTML }

Coke365
質問者

お礼

テストコードまで作成していただき、ありがとうございました。 確かにこのテストコードは私の環境でも動作しました。 どうやら問題はjsファイルのインポートのようです。 alertを出すだけの別のwritePage()を作って this.document.writeln("<script>function writeAll(){alert(\"writeAll\");}</script>"); というように直書きするとちゃんとonChangeで呼ばれるのですが、これをCalendar.jsに 書き込んでインポートしようとすると、認識されていないのか、エラーがでます。 Resinを使ったウェブアプリケーションの開発での話なのですが、 環境依存の問題なのかもしれません。 差し当たり現在は別の手法で開発しようかと検討中です。どうもありがとうございました。

その他の回答 (1)

noname#23734
noname#23734
回答No.1

<body onLoad="javascript:loadPage();">でドキュメントを書いているのでドキュメントの中身は Calendar <select onChange=\"javascript:loadPage();\"> <option>1月 <option>2月 </select> となっていてloadPage()は無いから「オブジェクトを指定してください」となるのでは?

Coke365
質問者

補足

あれ・・・そう言われてみれば・・・(汗 しかしですね、以下のように4の処理を変更しても やっぱり同じエラーが出てしまったのです。 自分自身(jsファイル)をインポートすること自体が いけないのでしょうか。。? [変更内容] (b)jsファイルをインポート。Calendar.jsとは showModalDialogやwritePageがあるjsファイル (d)onChangeで呼び出すJavaScriptメソッドを変更 (a),(c),(e)今まで割愛してましたが、念のため追加 4.3で呼び出されたjsファイル内のJavaScript、writePage()はこんな感じ function writePage() { this.document.open(); (a)this.document.writeln("<html><head><title></title>"); (b)this.document.writeln("<script language=\"JavaScript\" src=\"./js/Calendar.js\"></script>"); (c)this.document.writeln("</head><body>"); this.document.writeln("Calendar"); (d)this.document.writeln("<select onChange=\"javascript:writePage();\">"); this.document.writeln("<option>1月"); this.document.writeln("<option>2月"); this.document.writeln("</select>"); (e)this.document.writeln("</body></html>"); }

関連するQ&A

  • リロード

    すいません。私JavaScriptはまったくの素人です。 あるページを5分ごとにリロードさせたくて、 <script language="JavaScript"> <!-- function reload_me() { document.location.reload(); setTimeout("reload_me()",300000); } //--> </script> <BODY onLoad="reload_me()"> と書いたところ、ロードしてくると同時に次のロードが始まってしまい、 300000という時間が全くきいてないような感じです。 (間髪を入れず無限にリロードが続いている状態) <body>のonLoadに書いてはいけないのでしょうか? それとも書き方がよくないのでしょうか? よろしくお願いします。

  • iframe内をリロードできますか?

    たとえば <HTML> <head> <script language="javascript"> <!-- function a1reload(){ "iframe内をリロードする文章" } //--> </script> </head> <body> <iframe src="a1.html" id="a1iframe"><br> <a href="javascript: a1reload()">ここをクリック</a> </body> </HTML> こんな感じでiframe内をリロードできないでしょうか? お願いします。

  • html onchange

    下記のコードでf002は動きますが、f001が動きません。 scriptで作ったオプションメニューもonChangeが働くようにするには、いかがしたらよろしいでしょうか? <script language="JavaScript"><!-- function f001(){ if (document.test.s1.value==2) alert("2が入力されました"); } function f002(){ if (document.test.s2.value==2) alert("2が入力されました"); } var i,ht=[]; i=0; ht[i] = '<select onChange="f001()" id="s1" >'; for( var i=1; i<=5;) ht[i] = '<option value='+(i)+(i==1?' selected':'')+'>'+(i++)+'</option>'; ht[i] = '</select>'; document.write('s1 =', ht.join('')); // --></script> <form name="test"> s2 = <select onChange="f002()" id=s2> <option value=1 selected>1</option> <option value=2>2</option> <option value=3>3</option> <option value=4>4</option> </select> </form>

  • jqueryを使って非同期通信で10秒ごとにリロード

    jqueryを使って非同期通信で10秒ごとにリロードをさせようと しているのですが、 setInterval(function(){ $(document.body).load("./hoge.php"); },10000); とすると最初にリロードした10秒と次にリロードされた10秒が 一緒にカウントされているみたいで、リロードの間隔が めちゃくちゃになってしまいます。 どなたかご教授ください。 よろしくお願いいたします。

    • ベストアンサー
    • AJAX
  • Operaにおけるscriptのエスケープ?

    ボタンを押したらjQueryが使えるページを新規で開くように以下のようなソースを書いてみました。 ----------------------------------------------------------------------------------------- <input type="button" value="test" onclick="test()" /> <script type="text/javascript"> function test(){ var newWindow=window.open(); newWindow.document.open(); newWindow.document.writeln('<p>test</p>'); newWindow.document.writeln('<script type="text/javascript" src="http://code.jquery.com/jquery-latest.min.js"><\/script>'); newWindow.document.writeln('<p>test</p>'); newWindow.document.writeln('<p>test</p>'); newWindow.document.writeln('<p>test</p>'); newWindow.document.close(); } </script> ----------------------------------------------------------------------------------------- ところが、これだとOperaではうまくいきません。 「要素を検証」してみたところ、</script>以下がwritelnされていないようです。 src="~" の~部分を消してみると以下はきちんと書き込まれるのですが、それだとjsファイルを読み込むことができません。 </script>以外にもエスケープさせねばいけない所があるのでしょうか? それとも原因は他にあるのでしょうか? 教えていただければありがたく思います。 よろしくお願いします。

  • フォームの確認画面がうまく表示されません

    フォームで氏名を入力して確認画面を出したいのですが、 確認画面で、名前が出ずにソースがそのまま表示されます。 どうしてもわからないので、どなたかよろしくお願いします。 <script LANGUAGE="JavaScript"> <!--// function check(){ document.open(); document.writeln('<html>\n<head>'); document.writeln('<title>送信内容確認</title>'); document.writeln('</head>\n<body>\n<table>'); document.write('<tr>\n<td>名前:</td>\n<td>'); document.write('+document.kakunin.NAME.value+'); document.writeln('</td>\n</tr>\n</table>'); document.writeln('</body>\n</html>'); document.close(); } //--> </script> </head> <body> <form NAME="kakunin" action="mailto:aaa@hotmail.com" method="POST" enctype="text/plain"> 名前<input type="text" name="NAME"><br><br> <input type="button" value=" 確認 " onClick="check()"> </body>

  • サブウィンドウに背景色をつけたいのですが・・・

    今仕事でホームページを初めて作成しています。 そこで、30秒程度したら自動的に消えるサブウィンドウを作成したのですが、背景色がぜんぜんつきません。 いったいどこに、背景色のスクリプトを表示したらいいのですか。教えてください。 初心者でわからないので、全部のせてしまいました・・・ 要領わるくてすいません。 function createSubWindow() { subWindow = window.open("","SubWindow","width=370,height=220"); subWindow.document.writeln("<META HTTP-EQUIV='Content-Type' CONTENT='text/html; charset=Shift_JIS'>"); subWindow.document.writeln("<HTML>"); subWindow.document.writeln("<HEAD>"); subWindow.document.writeln("<TITLE>Whata's New?</TITLE>"); subWindow.document.writeln("<SCRIPT LANGUAGE='JavaScript'>"); subWindow.document.writeln("<!--"); subWindow.document.writeln("function setTimer() {"); subWindow.document.writeln("window.setTimeout('window.close()', 30 * 1000);"); subWindow.document.writeln("}"); subWindow.document.write ("//--"); subWindow.document.writeln(">"); subWindow.document.writeln("</SCRIPT>"); subWindow.document.writeln("</HEAD>"); subWindow.document.writeln("<BODY onLoad='setTimer()'>"); subWindow.document.writeln("</BODY>"); subWindow.document.writeln("</HTML>"); subWindow.document.close(); } function closeSubWindow() { if(!subWindow.closed) { subWindow.close(); } } //--> </SCRIPT>

  • リロード後にプルダウンの選択状態を維持する方法

    どなたかおしえてください。 2つのプルダウン(ドロップダウンリスト)があり、双方ともDBのテーブルのある一列を参照できます。 2つのプルダウンが、A,及びBと仮定した場合、Aのあるデータを選択すると自動的にBが選択される状態です。 Bを選択するには、submitボタンを押下する必要があるのですが、押下すると画面がリロードされてしまい、Aの選択項目がデフォルト値に戻ってしまいます。 解決したいことは、リロード後もAの値を維持したいということです。 私が試している方法は、JavaScriptを使う方法なのですが、どうもうまくいきません。下記のコードを追加すると、CGIエラーになってしまいます。 print "<script language=javascript src=pull.js>\n"; print "</script>\n"; print "<select name=from onChange=menuLink(this.options[this.selectedIndex].value)>\n"; 【pull.js】 <script language="JavaScript"> <!-- function menuLink(linkLoc){ if (linkLoc != ""){ parent.main.location.href = linkLoc; } } // --> </script> 識者の方情報を提供いただけないでしょうか。

    • ベストアンサー
    • CGI
  • アラートをクリックした後、別ウインドウを閉じる

    下記はCGIのフォームから画像を送信する時、別ウインドウに画像を表示して、アラートでOKかキャンセルかを確認するJavaScriptです、 OKの場合別ウインドウを自動的に閉じたいのですが、 print <<"END_HERE"; <SCRIPT language="JavaScript"> <!-- function check() { imag = "file:///"+document.Form1.file_1.value.replace(/\\\\/g, '/'); var new1 = window.open('','new1', 'width=500, height=400'); new1.document.writeln("<HTML lang='ja'>"); new1.document.writeln("<HEAD>"); new1.document.writeln("<META HTTP-EQUIV=\\"Content-Script-Type\\" CONTENT=\\"text/javascript\\">"); new1.document.writeln("<TITLE>画像確認<"+"/TITLE>"); new1.document.writeln("<"+"/HEAD>"); new1.document.writeln("<BODY ><CENTER>"); new1.document.writeln("<img src=\\""+imag+"\\">"); new1.document.writeln("<SCRIPT type='text/javascript'>"); new1.document.writeln("<!-"+"-"); new1.document.writeln("var conf = confirm('この画像でOKですか?');"); new1.document.writeln("//-"+"->"); new1.document.writeln("<"+"/SCRIPT>"); new1.document.writeln("<"+"/CENTER>"); new1.document.writeln("<"+"/BODY>"); new1.document.writeln("<"+"/HTML>"); new1.document.close(); return new1.conf; } //--> </SCRIPT> END_HERE よろしくお願いします。

  • Selectの中身をfor文で入れる

    かなり初歩的な質問だと思いますが select文のoptionの値に1~100の数値を入れたいときに JavaScriptではどのように記述すればいいのでしょうか。 ページ読み込み時にはフォームに代入したいので [htmlファイル] <body onload="init()"> ・・・ <form name="f1"> <select name="s1"></select> [jsファイル] function init() {  for(i=1; i<=100; i++)   document.f1.s1.value=i; } のようにしたのですがうまくいきません。

専門家に質問してみよう