• ベストアンサー

JavaScript 子ウィンドウにデータを表示したいが・・

JavaScriptで子ウィンドウを開いて、そこの<textarea>にデータをセットしたいのですがうまくいきません。 親は <input type="button" value="Out" onClick="output()" /><br /> : : function output() { hWin=window.open("childwindow.htm", "test", "width=400,height=400"); hWin.document.op.out.value="MNL"; } 子(childwindow.htm)は : <form name="op"> <textarea name="out"> です。

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

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.7

試しに・・・ clearTimeout(parent.tid) の行をけずってみてください。 windowが開いた後MNLとかきこまれるのは 一緒ですが、textareaの値を手で書き換えても すぐ上書きされます。 これはsetIntervalが、連続して同じ作業を くりかえすからです。 if(win.document.op.out)でオブジェクトが定義 された時点で、MNLをかきこみ、連続作業を clearTimeoutで「もうやめていいよ」と宣言 しているというフローです

masa328
質問者

お礼

ご指摘のとおりclearTimeout(parent.tid)をコメントアウトしましたが、状況はかわらずでした。(上書き後すぐ元の値に戻るというのは確認できましたが。) 実は親ウィンドウが最初のプロセスでGoogleMapの地図をダウンロードしているのですね。それで、子ウィンドウが開くのに時間がかかり、うまくいかないようです。実際は、Mapを表示させてから子ウィンドウを開く使い方が普通だとは思うのですが、100%そうともいえないので苦労しています。

その他の回答 (7)

  • chinensis
  • ベストアンサー率40% (54/132)
回答No.8

>実は親ウィンドウが最初のプロセスでGoogleMapの地図をダウンロードしているのですね。それで、子ウィンドウが開くのに時間がかかり、うまくいかないようです。 最初に子ウインドウを開き、マップダウンロード後に子ウインドウへ書き込んでは? もしくは別途イベントハンドラ(onFocus,onLoad等)で値を設定するようにするのは?

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.6

まぁこんな感じにすると動いているっぽいのですが ウィンドウが立ちあがらないとループすると言う つくりはあまりよろしくないかもしれませんね。 <input type="button" value="Out" onClick="output()" /><br /> <script language="javascript"> function output(){ hWin=window.open("childwindow.htm", "test", "width=400,height=400"); tid=setInterval("repeatFunc(hWin)",100) } function repeatFunc(win){ if(win.document.op.out){ win.document.op.out.value="MNL" clearTimeout(parent.tid) } } </script>

masa328
質問者

お礼

具体的なコードありがとうございました。setInterval("repeatFunc(hWin)",100)ではうまくいかなかったので、試しに1000にしてみればOKでした。 結局は、環境によりけりということで、最初のsetTimeoutを使う例よりはマージンを小さくできるということなのでしょうか?

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.5

>この値というのは、例えばインターネットへの接続環境によって違うということでしょうか? >だとすると、どれくらいの値を取るのが普通なのでしょうか? ご推察の通り、接続環境や接続しているサーバーの負荷状況とかによっても違ってくると思います。 どれくらいが適当かというのは一概に言えません、場合によっては10分以上サーバーからレスポンスがないかもしれませんし・・ setTimeout や setInterval を使って 間けつ実行してみてOK(読み込めるようになった)だったら clearTimeout や clearInterval で待ちを解除する とかでやるのかなと思いますが、 あまり長い時間待てる閲覧者もいないでしょうし、 適当な時間でタイムアウトということにしてもいいんじゃないでしょうか。 それは、ページの作成者の考え次第だと思います。

masa328
質問者

お礼

適当な時間でタイムアウト・・・。 ただ、それでも、子ウィンドウは表示されていて、データがセットされないという結果になるので、サイトの利用者は「あれ?」ってことになっちゃうと思うんですよね。 いっそうのこと、子ウィンドウが表示されなきゃ、あタイムアウトかとわかるとは思うのでしょうけど。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.4

つまり、オブジェクトが作られる前にセットしよう としているからだめなわけで、ブラウザの busyを見る方法もありますが、ブラウザ依存に なる可能性も有り、総じてウェイトをかける方法が 妥当だという経緯です。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.3

多分、子ウィンドウが読み込まれ終わっていない時期に値をセットしようとするから失敗しているのだと思います。 少し時間待ちをしてやる必要があります。

masa328
質問者

お礼

あ、下の方のコードで3000ミリ秒くらいウェイトをかけたら表示されました。 しかし、この値というのは、例えばインターネットへの接続環境によって違うということでしょうか? だとすると、どれくらいの値を取るのが普通なのでしょうか?

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

とりあえず以下にしてみてください <input type="button" value="Out" onClick="output()" /><br /> <script language="javascript"> function output(){ hWin=window.open("childwindow.htm", "test", "width=400,height=400"); setTimeout('hWin.document.op.out.value="MNL"',0) } </script>

masa328
質問者

お礼

すいません、ちなみに一度子ウィンドウが表示されてから、再度(この例ですと)「Out」をクリックすると表示されます。

masa328
質問者

補足

回答ありがとうございます。 実行してみたのですが、やはり値がセットされません・・(>_<)

noname#22259
noname#22259
回答No.1

--子(childwindow.htm)-- × <form name="op"> <textarea name="out"> ○ <form name="op"> <textarea name="out"></textarea> </form>

masa328
質問者

補足

あ、すいません。質問する時にちょっと切れちゃって・・・ textarea,formのタグはちゃんと閉じています・・

関連するQ&A

  • JavaScriptで子ウィンドウからメールを送信

    javascriptで子ウィンドウからメールを送信したいです。 JSは全くの素人なので、手探りでやっています。 サーバーはCGIが使えない環境なので、何かよい方法はないでしょうか? <html> <title>sub window sample1</title> <body> <h1>Sub Window Sample1</h1> <script language="JavaScript" type="text/javascript"> function formSubmit(){ window.open("","window1","width=400","height=200"); document.getElementById("form1").target = "window1" ); } </script> <form id="form1" action="" > <input type="button" name="submit" value="mail window!" onClick="formSubmit()"> </form> </body> </html> このようなソースを途中まで書いてみましたが、子ウインドウすら開いて くれません。 ぜひご教示をよろしくお願いいたします。

  • ウィンドウサイズ2

    (先ほど質問したのですが、わかりにくいのでもう一度...) <INPUT TYPE="button" VALUE="open window" onClick='myWin = window.open("sample.htm","Sample","width=200,height=200")'> で、200×200の新しいウィンドウが開けますよね。 これを、ボタンではなく普通のリンクに、また、新しいウィンドウを開くのではなく元のウィンドウのサイズを変えることはできますか?

  • 子ウィンドウを閉じるとき、親ウィンドウのテキストボックスにカーソルを移動したい。

    子ウィンドウを閉じるとき、親ウィンドウのテキストボックスにカーソルを移動したい。(java) <script> function openChild(f){ window.open("child2.htm","_blank"); } </script> <form> <input id="text1"><br /> <input id="text2"><br /> <input type="button" onclick="openChild(this.form)" value="子ウィンドを開く"> </form> 子ウィンドを閉じる <input type="button" onclick="window.close()" value="閉じる"> 親ウィンドウのテキストボックス(id="text2")にカーソルを移動したいのですが。 <input id="text2"><br />

  • 子ウインドウのカート送信時に親ウインドウに結果表示したい

    親ウインドウからカート表示する子ウインドウ開き、 カートの送信ボタンを押した後、子ウインドウには カートを表示したままで、親ウインドウにカートを 表示したいのです。通常のカートだと送信ボタンを押すと そのウインドウにカート内容が表示されてしまいます。 子ウインドウ <form action="http://www.****.cgi" method="post"> <input type="hidden" name="_shop_id" value="****"> <select name="_item"> <option value="商品A\200">商品A \200 </select> <input type="hidden" name="_zaiko" value=""><select name="_num"> <option value="1">1 <option value="2">2 <option value="3">3 </select> <BR> <input type="hidden" name="_memo1"><input type="hidden" name="_memo2"> <input type="hidden" name="_memo3"> <input type=hidden name="ORDSTEP" value="step1"> <input type="submit" value="買い物カゴへ"></form> 親ウインドウ <script language="JavaScript"> <!-- var openWin ; //--> </script> </HEAD> <BODY> <DIV style="width : 42px;height : 16px;top : 55px;left : 157px; position : absolute; z-index : 1; " id="Layer1"><input type ="button" value ="OPEN" onclick ="openWin = window.open('testcart1.htm', '', 'width=400,height=400');" 以上よろしくお願いします。

  • window.openで開いた子ウィンドウから親ウィンドウのjavascriptを実行するには

    window.openで開いた子ウィンドウから親ウィンドウのjavascriptを実行するにはどうしたらよいのでしょうか。 子ウィンドウから <INPUT TYPE="button" value=\"実行\" onClick=opener.document.jikkou();> や <INPUT TYPE="button" value=\"実行\" onClick=opener.jikkou();> 等のボタンを作ってみましたが、無反応でした。 すいません。宜しくお願いします。

  • JavaScriptでメールフォーム

    サイトでメールフォームをCGIを使わずに、JavaScriptで作成した時の話なのですが、 例えば、 <form name="mail" action="mailto:aaa@bbb.com" method="post" enctype="text/plain"> 名前<br> <input name="name"><br> 送信内容<br> <textarea style="WIDTH: 164px; HEIGHT: 50px" name="body"></textarea><br> <input style="WIDTH: 74px; HEIGHT: 21px" type="submit" size="37" value="送信"></form> ↑のような一般型のフォームは出来るのですが、 メールの送信先をメール送信者に指定させてそのアドレスにメールを送信するようにするにはどうしたら良いのでしょうか? すみませんが御願いします・・・

  • javascript iframeについて

    iframeにてアンケート的な物を作成しています。 ページは13ページくらいです ボタンを押すと次のページに移動し、さらに親のテキストエリアに選択したボタンの文言が上から保存されていくようにしたいのですが ↓は子のiframe内ですが、どのようにしていいかわからなくて、、 <html> <head> <link href="./if.css" rel="stylesheet" type="text/css"> </head> しつもん1<br><br> <form name="test"> <input type="button" name="001" value="戸館"onClick="kakunin(1)";onClick="setChars('AAAA')")><br><br> <input type="button" name="002" value="集合住宅" onClick="kakunin(2)"> </form> <form name="myFORM"> <textarea name="myTEXT"rows="10"></textarea><br> <!-- ↓ ここから先はJavaScript!!! --!> <script type="Text/Javascript"> function setChars(text) { if (document.myFORM.myTEXT.value || "") { document.myFORM.myTEXT.value = document.myFORM.myTEXT.value + "\n" } document.myFORM.myTEXT.value = document.myFORM.myTEXT.value + text } function kakunin(btnNo){ if (btnNo == 1){ link = "戸館"; href = "EN002.html"; }else{ link = "集合住宅"; href = "EN002m.html"; } ret = confirm(link + "でよろしいですか?"); if (ret == true){ location.href = href; } } </script> </html> よろしくお願いいします。

  • INPUTタグを使ってリンク先のウインドウを指定したい

    INPUTタグを使って、リンク先を表示させたいのですが、うまくいきません。わかる方よろしくお願いします。 今迄正常に動いていたソース↓ <INPUT type="button" value="ログオン" onclick="window.open('test.htm','win1','width=400,height=500');"> リンク先のウインドウの表示方法を変えると不具合がおこるソース↓ <INPUT type="button" value="ログオン" onclick="window.open('test.htm','win1','target=_home');"> ※フレームのページを使っていて(フレーム名 headとhome)、homeに表示させたい。 INPUTタグを使用したい。

  • JavaScript ボタンで指定の箇所を変更する方法

    よろしくお願いします。m(_ _)m 現在下記ソースの様なチェックボックスで出来たテーブルフォームを作成しております。 【やりたい事】 1.ボタンを作りたい 水色(22BBFF)ボタンを1度押下すると紫色(CC55EE)に変わり もう1度押下すると赤色(FF3300)にもう1度押下すると水色(22BBFF)に戻る。(水色→紫色→赤色→水色→紫色→・・・) 2.行単位・列単位で一括で変更したい 縦1、または横1などのボタンを押下するとボタンに対する行or列のボタン全てが一括で変更されるようなものをつくりたい という事を行いたいと思い、色々調べてみたのですが、 発見できませんでしたので質問させていただきました。 どうかお助けください。m(>_<)m -- <HTML> <HEAD> <META http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <TITLE></TITLE> </HEAD> <BODY> <form name="F1"> <table border="1"> <tr> <td>一覧</td> <td>縦1<br><input type="button" name="tate_btn001" id="x1y0" style="height:15px; width:15px; background-color:22bbff;" onClick="tate(1)"/></td> <td>縦2<br><input type="button" name="tate_btn002" id="x2y0" style="height:15px; width:15px; background-color:22bbff;" onClick="tate(2)"/></td> <td>縦3<br><input type="button" name="tate_btn003" id="x3y0" style="height:15px; width:15px; background-color:22bbff;" onClick="tate(3)"/></td> </tr> <tr> <td>横1 <input type="button" name="yoko_btn001" id="x0y1" style="height:15px; width:15px; background-color:22bbff;" onClick="yoko(1)"/> </td> <td><input type="button" name="btn001" id="x1y1" style="height:15px; width:15px; background-color:22bbff;" onclick="" /></td> <td><input type="button" name="btn002" id="x2y1" style="height:15px; width:15px; background-color:22bbff;" onclick="" /></td> <td><input type="button" name="btn003" id="x3y1" style="height:15px; width:15px; background-color:22bbff;" onclick="" /></td> </tr> <tr> <td>横2 <input type="button" name="yoko_btn002" id="x0y2" style="height:15px; width:15px; background-color:22bbff;" onClick="yoko(2)"/> </td> <td><input type="button" name="btn004" id="x1y2" style="height:15px; width:15px; background-color:22bbff;" onclick="" /></td> <td><input type="button" name="btn005" id="x2y2" style="height:15px; width:15px; background-color:22bbff;" onclick="" /></td> <td><input type="button" name="btn006" id="x3y2" style="height:15px; width:15px; background-color:22bbff;" onclick="" /></td> </tr> <tr> <td>横3 <input type="button" name="yoko_btn003" id="x0y3" style="height:15px; width:15px; background-color:22bbff;" onClick="yoko(3)"/> </td> <td><input type="button" name="btn007" id="x1y3" style="height:15px; width:15px; background-color:22bbff;" onclick="" /></td> <td><input type="button" name="btn008" id="x2y3" style="height:15px; width:15px; background-color:22bbff;" onclick="" /></td> <td><input type="button" name="btn009" id="x3y3" style="height:15px; width:15px; background-color:22bbff;" onclick="" /></td> </tr> </table> </form>

  • javascriptで別ウインドウを開いたのですが背景設置が上手くいきません。

    いつもお世話になっております。 JavaScriptを使用し別ウインドウで画像を表示させているのですが、 そのウインドウの背景が上手く設定できません。 どのように編集すればよいでしょうか? 現在の状態は以下の通りです。 <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <title>aaa</title> <script language="javascript"> <!-- function OpenWindow(){ var width = document.images['00'].width + 228; var height = document.images['00'].height +254; subWin = window.open("","subWin","status=no,menubar=no,toolbar=no,scrollbars=no,resizable=yes,screenX=0,screenY=0,width=" + width + ",height=" + height + '"'); with(subWin.document) { open(); write("<html><head><title>sample1</title></head>"); write("<body onload='window.resizeTo( document.images[00].width + 40,document.images[00].height + 120)'><div align='center'><img id='00' src='b/1b.jpg'><br>"); write("<button type='button' onclick='window.close()'>閉じる</button></body></div></html>"); close(); } } --> </script></head> 宜しくお願いします。

専門家に質問してみよう