親画面に値を戻しテキストエリアに表示する方法

このQ&Aのポイント
  • 親画面に値を戻すための方法として、PHPのjavascript記述部分から別のPHPを呼び出し、SQLで値を取得し、親画面のテキストエリアに表示する方法があります。
  • しかし、呼び出し元でalert()のイベントがないと表示ができません。そのため、location.reload()などを試しても表示されない場合があります。
  • 解決方法としては、alert()をはずすことで表示がされるようになります。alert()はデバッグ用に設定しているため、削除しても問題ありません。
回答を見る
  • ベストアンサー

親画面に値を戻しテキストエリアに表示

phpのjavascript記述部分から別のphp(関数・SQL処理等)を呼び出しSQLで値を取得後、 親画面に値を戻してテキストエリアに表示したいのですが、呼び出し元でalret()のイベントがないと表示ができません。 location.reload()など試してみましたが、やはり表示されません。 alert()はデバック用に設定していたもので、はずすと表示がされなくなり困っています。 これはどういう状況になっているのでしょうか。 また解決方法を教えてください。 ◆やりたいこと 親画面にある検索ボタンで子画面ポップアップされ、 子画面で選択した値を元にSQLで値取得し、これを親画面に戻し テキストエリアに表示。 DBはMySQL。 (抜粋) ----- ◆親画面.js fm.createElement("<textarea name='txtMemo["+idx+"]' cols='80' rows='5'>"); ◆子画面.php //関数を呼ぶ <script language="javascript"> <!-- window.dialogArguments.wind.top.leftFrame.submitFrame.location.href = "syori.php?fnc=setText&num="+num+"&idx="+<?=$idx;?>; alert("これがないと親のテキストエリアに表示されない"); window.close(); //--> </script> ◆処理 syori.php //SQLで値を取得し、親画面に渡したい←コレができない if($fnc == "setText") { $query = "select TTextMemo from TText where TNo = '$num'"; $result = db_field($query, 0); ?> <script type="text/javascript"> <!-- document.BtmFrm.elements["txtMemo[<?=$idx;?>]"].value = "<?=$result;?>";←alertがないと表示されない //--> </script> <? exit; } ----- 宜しくお願いします。

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

  • ベストアンサー
  • susie-t
  • ベストアンサー率86% (37/43)
回答No.2

補足に今気が付きました。すでに遅いかもしれませんが。 > 実はこの処理の前に1つだけではなく2つ別の関数を呼んでいる処理があり、syori.phpの値変更後にwindow.close()するわけにはいかないのです。 > 問題の関数はif文で通る時と通らないときがあり、必ず通る関数ではありません。なのでwindow.close()は動かしたくないのです。 すみません、このあたりの意味が掴めません・・・。 「別の処理」→ 二つの関数を呼ぶ ↓ if(条件?){ 「この処理」= shori.php → window.close()できない? }else{ 【案】この場合でもwindow.close()。テキストエリア更新はしない。 } いずれにしろ、syori.phpの「document.BtmFrm.elements・・・」の部分はクライアントサイドで動作するので、(クライアントの)レスポンス受信時に動作するwindow(この場合はフレーム)がなければ破棄されます。なので、window.closeはそれ以降に実行する必要があります。補足の意図を「条件によらずcloseさせたい」と解すれば、条件に合致しない場合でもサーバー側はwindow.closeさせるスクリプトを返却する必要があります。(テキストエリアの更新はしない。) 参考になりますでしょうか。

9pinkapple
質問者

補足

遅いレスですみません。再度の書込みありがとうございました。 残念ですが、今回は仕様が変更になったため、悩んでいた部分は解消することなく終わってしまいました。 ありがとうございました。

その他の回答 (1)

  • susie-t
  • ベストアンサー率86% (37/43)
回答No.1

phpは読めませんが、この現象はたぶん、子画面で別フレームに処理させようとしているけれども、その前にwindow.close();してしまっているのが原因と思います。(alertがあるとその間に処理できる) なので、syori.phpの値変更の後にwindow.close();を移せばうまくいくかもしれません。

9pinkapple
質問者

補足

回答ありがとうございます。すぐ回答くださったのに、お返事が送れてすみません。未だ試行錯誤してやってますが、解決に至りません。 確かに、window.close()を移すと思い通りの動きになりますが、 実はこの処理の前に1つだけではなく2つ別の関数を呼んでいる処理があり、syori.phpの値変更後にwindow.close()するわけにはいかないのです。 また、その2つの関数は、その関数内でエラーalert()処理があり、それがなければ、そのままwindow.close()に実行が移る仕組みなので、意図した動きをしています。 問題の関数をその2つの関数を呼んだ後にもってくる方法もありますが、問題の関数はif文で通る時と通らないときがあり、必ず通る関数ではありません。なのでwindow.close()は動かしたくないのです。 情報が不足していまして、すみませんでした。 再度、ご教授願えませんでしょうか。

関連するQ&A

  • 親ウィンドウに値が戻らない

    親ウィンドウから、子ウィンドウを開き、ラジオボタンで、選択された部分のコードを親ウィンドウにセットしたいのですが、決定ボタンを押しても、値が戻りません。JavaScript部分で、親ウィンドウの項目に値を代入 しているつもりなのですが・・・・。 <?php $tokum = ""; /* 得意先マスターの値をもらう配列 */ /* 初期画面の表示 */ $sql = "select * from tokump00 order by tatkcd asc limit 0,15"; $result = mysql_query($sql,$con); $num = mysql_num_rows($result); ?> <script type="text/javascript"> <!-- function ReturnCode() { for($i=0;$i<15;$i++) if(document.gamen.code.checked) window.opener.document.syoukai.tkcd.value=document.gamen.code.value; } --> </script> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <title>得意先コード検索</title> </head> <body bgcolor="#FFEEFF"> <form name="gamen" action="codekensaku.php" method="post"> <input type="button" value="決定" onClick="ReturnCode()"><br><br> <table border="1"> <tr> <th>チェック</th> <th>コード</th> </tr> <?php for($i=1;$i<16;$i++) { $tokum = mysql_fetch_array($result); ?> <tr> <td><input type="radio" name="code" value="<?php echo($tokum[tatkcd]); ?>"> <td><?php echo($tokum[tatkcd]); ?></td> </tr> <?php } ?> </table> </form> </body> </html>

  • 画面から画面へ値1つずつ複数回受け渡しすべてを表示

    タイトル: 子画面から親画面へ値を1つずつ複数回受け渡してすべてを表示するにはどうすればよいでしょうか 内容 はじめまして。 こんにちは DIK です。 私、VisualStudio2013web のASP.netでWebアプリケーションを作成しております 使用言語は Server言語:C# Script言語:JavaScript Sql言語:PostgleSQL クライアント言語にHTML関連他、jQuwery なんかも使っております。 ご質問がありまして、ご教授いただけませんでしょうか・ 内容をざっくり申しますと、画面から画面へ値1つずつ複数回受け渡しすべてを表示することです。 もう少し詳しく解説しますと 親画面と小画面があり、値の受け渡しを行います。 親画面は値の受け取り、子画面が値の渡します 1.子画面を開き、SQLでDBの値を検索してすべてのレコードを表示させます。 2.子画面でDBjのデータが複数表示されている状態で一件データを選択します 3.そのデータを親画面に値を一件送り表示させます。 4.親画面に表示されている状態で、子画面からデータを新たに選択をします 5.そのデータを送ります。 6すると、3で送ったデータ(値)と5で送った値の両方が親画面に表示される このようにするにはどのようにするとよいでしょうか。 方法としてはSessionやApplication変数を使用して送る方法を行いました。 子画面(ポップアップウインドウ)側 ```C# //DataGridで表示したDBの値の取得文(位置セル分の値) //codeはDBで取得した値の1件分のデータです。          String code = MyGrid.Items[e.Item.ItemIndex].Cells[0].Text;         ArrayList data = new ArrayList(); data.Add(code); for (int d = 0; d < data.Count; d++) { String Gridcode = ""; Gridcode+= Convert.ToString(" or goods_code ='" + (String)data[d]) + "'"; Session["Gridcode"] = Gridcode; Application["Gridcode2"] = Gridcode;  } //親画面リロード //再選択へ戻る ``` 親画面側 ```C# //方法1 string Gridcode = (string)(Session["Gridcode"]); string sql = ""; sql += " select goods_name, goods_code from MST_goods "; sql += "where goods_code =''"; sql += "" + Gridcode + ""; //方法2 string Gridcode2 = (string)(Application["Gridcode2"]);      string sql = ""; sql += " select goods_name, goods_code from MST_goods "; sql += "where goods_code =''"; sql += "" + Gridcode2 + ""; ``` 結果は Session["Gridcode"] = Gridcode; Application["Gridcode2"] = Gridcode; の値が子画面から渡すと上書きされてします。 またArrayListで回している値が毎回1データのみになっています 値を複数複数回で複数件回して受け渡すように記述しようとしました ほかに良い方法はありませんか? なおD子画面で選択した値をDB格納させて親画面でDBに格納したデータをすべて取得する方法では実現できますが 条件としては与えられたDBテーブル情報を変更せずに行うことです。そのため値を送るためのDBを作ることができません。 その他の処理は画面操作が同じ動きをできれば、どんな方法を使用しても構いませんということで作成をしております 非常に困っております 長々となってしまい、文章に誤字や説明不足など至らない点があるかと思われますが どなたかご教示お願い致します。 最後に 画面遷移方法をお伝えします 1.らC#側にJavaScriptの処理をさせて画面の開閉を行う 2.子画面はポップアップウインドウです 開き方は、親画面から Window.open() で子画面を開く           C#側に ```C# string startupScript = ""; startupScript += "<script language='JavaScript'> window.open()"; startupScript += " <" + "/script>"; ClientScript.RegisterStartupScript(this.GetType(), "startup", startupScript); ``` の記述をしております 処理を行い子画面からなんだかの処理Reloadで親画面に処理を送る           C#側に ```C# string startupScript = ""; startupScript += "<script language='JavaScript'>   window.opener.location.reload()"; startupScript += " <" + "/script>"; ClientScript.RegisterStartupScript(this.GetType(), "startup", startupScript); ``` の記述をしております この処理によってポップアップウインドウを操作して元画面に値を送る処理を行えました    

  • 現画面のセレクタタグの値を呼び出して使いたい

    ちょっと基本的なことで悩んでしまっているのですが、 セレクタタグにname="selform"という名前を付けて、現画面上で選択されている値を取り出したいのですが、 <script type="text/javascript"> <!--    atai = document.forms[0].selform.value; //--> </script> ここで、このataiをPHPの変数として渡してPHP側で何がしかの処理をしたいのですが、その場合、どのように書けばよいのでしょうか? 御教示願えればと思います。

  • PHPの文字列変数をJavaScriptのalertで表示させたい

    <?php  $mes = 123; print<<<EOF  <script Language="JavaScript">  <!--   JavaScript:alert( $mes );  //-->  </script> EOF; ?> ↑のコードを実行すると123というメッセージボックスが表示されます。 <?php  $mes = "aaa"; print<<<EOF  <script Language="JavaScript">  <!--   JavaScript:alert( $mes );  //-->  </script> EOF; ?> しかしこのように数値変数でははく文字列変数を渡すと表示できません。 JavaScriptにPHPの文字列変数を受け渡すことはできるのでしょうか?

    • ベストアンサー
    • PHP
  • テキストエリアの値を変数にしたいのですが・・・

    はじめまして。 初めて質問させていただきます。 USBのバーコードリーダーで商品のバーコードを読み込み、ボタンをクリックしたら「バーコードの値=ファイル名」となっている音源が開く、という仕組みを作りたいと考えています。 例えば 商品のバーコード値:12345  音源のファイル名:12345.rm という感じです。 テキストエリアにバーコードで読み取った商品コードを表示することはできたのですが、その先が上手くいきません。 音源はHTMLと同じフォルダに入っているので <Input type="button" value="開く" onclick="location.href='12345.rm'"> これならボタンをクリックすれば音源を開くことはできます。 ただ、バーコードで読み取った値をファイル名に置換したいので 変数を使うことになると思うのですが、テキストエリアの値をxxxのような変数にする方法がわかりません。 理想としては、 xxx = textareaの値 onclick="location.href='xxx.rm'" ←テキストエリアの値をxxxに置換する。 という感じです。 javascriptは初心者なため、レベルの低い質問で恐縮ですが、どなたかご教授下さい。

  • 子画面への値の渡し方

    親画面と子画面があるとします。 親画面にテキストボックスとボタンがあります。 親画面のボタンを押すと、javascriptのWindow.Openで 子画面を開きます。 子画面は、最初の初期表示で検索結果を表示します。 子画面の検索のキーは、親画面のテキストボックスが持っています。 この時、検索する為に子画面で、親画面のテキストボックスの値を 参照したいのですが参照方法が分かりません。 javascript ではwindow.opener 等で参照できるようですが プログラムの中で値を参照したいと考えております。 初期時なのでPage_Load等に組み込む予定です。 どのような手段があるのでしょうか。 (Delphi .net WEBで作成です)

  • phpの処理中に画面表示ををするには?

    phpの処理中に画面表示ををするには? phpの処理中にalertや画面表示ができるように依頼があり。 使ってはいけない方法もあり解決方法がみつからず困っています。 処理内容 5回ループする処理で1回の処理に約10秒かかる、 各回の処理が終わったところで画面表示やalertをする。 使ってはいけない方法 ・iframeやAjaxなどの非同期処理みたいな事はしない。(却下されました、、) ・このphpのループの各回でsubmitや再読み込みをさせない。 今までphpの処理が全て終わってから画面表示するイメージでいたので、 実現できるのか確認するため下記のソースを作りました。 結果:10秒ではなく50秒後にすべてのalertがでてきました。 ----------ここから---------- <html><head> <script> <!-- <? for(i=0; i<5; i++){ //10秒の処理 ?> alert("メッセージ:".i); <? } ?> //--> </script> </head> <body>無理な気がする</body> </html> ----------ここまで---------- (変数のダラは抜いています) 使ってはいけない方法以外に解決方法はあるのでしょうか。

    • ベストアンサー
    • PHP
  • テキストエリアをリアルタイムに表示したい

    こんにちは。 下記のテキストエリア部分をフォーム内に入れると、リアルタイムに表示されません。リアルタイムに表示させようと思うとどうすればよいのでしょうか? いろいろ試しては見るのですが、まだ勉強不足で思うように表現できませんでした。 わがままを言って申し訳ありませんが、どうかお力添えをお願い致します。<html> <head> <script language="javascript"> function myFunc() { dispArea.innerHTML = sourceArea.value; } var defaultStr = "<h1>hello</h1>\n<p>ここを書き換えると下の表示も変化します。</p><button onclick=\"alert('Hi')\">TEST</button>\n<hr>" </script> </head> <body onload="sourceArea.value=defaultStr;myFunc()"> <h2>HTML編集をリアルタイムに反映させる例</h2> <hr> <textarea name="form1" id="sourceArea" style="width:450px;height:200px;" onkeyup="myFunc()"> </textarea> <div id="dispArea" style="width:450px;height:200px;"> </div> </body> </html>

  • JS(ajax)でphp(csv)の読み込み

    こんにちは。 Javascriptのご教授お願いしたく、書き込みました。 今JavascriptでAjaxを使って、CSVを読み込むPHPを実行しています。 PHPでは、CSVを読み込み(readcsv.php)、その結果を別のファイル(alert.html)に受け渡しています。 問題が、読み込んでいるJavascript側でもデータを一つ一つ取得したいですが、 方法が分かりません。ご教授お願いします。 構成 : alert.html(Javascript), readcsv.php, test.csv コード構成 : -------------------------------------------------------------------------- alert.html <script type="text/javascript"> $.ajax({ type: "POST", url: "readcsv.php", success: function(printString) { alert(printString); --> ここをどうするべきか悩んでいます。 }, error:function(){ alert("error"); } } ); </script> ------------------------------------------------------------------------------- readcsv.php <?php $filename = "test.csv"; $row = 1; $rowS = 1; if (($handle = fopen($filename, "r")) !== FALSE) { while (($data = fgetcsv($handle, 1000, "*")) !== FALSE) { $num = count($data); $row++; for ($c=0; $c < $num; $c++) { $String = explode(",", $data[$c]); foreach ($String as $AllString) { echo $AllString."\n"; } echo "\n"; } } fclose($handle); } ?> ---------------------------------------------------------------------------- test.csv 1,2,3,4,6,8*9,1,2,3,5,7,2,1,3,5*7,2,1,2,3,5,7,2*1,5,3 ---> 数字の羅列(コンマ区切り) ---------------------------------------------------------------------------- です。 一番問題になっているところは、 alert.html の alertのところで、 readcsv.php から受け取った値を一つ一つ変数に格納したいところです。 ご教授お願いします。

  • JS テキストエリアを多色表示させるには?

    JavaScriptでテキストエリアの数字だけ 赤字にすることはできますか? 「できません」と即答しそうですが、 工夫すれば「できました」になります。(添付図参照) このように、テキストエリアを表示するには どんなコードでできますか? <div class="container"> <textarea class="textArea" readonly></textarea> </div> <script> //テキストエリアに表示するデータ const data = [ ["== The Body Mass Index (BMI) RESULT =="], [" "], ["DANDY 身長 170cm, 体重 70Kg, BMI: 24.2, Normal"], ["CHUBBY 身長 160cm, 体重 70Kg, BMI: 27.3, OverWeight"], ["FATMAN 身長 150cm, 体重 70Kg, BMI: 31.1, Obese Class I"], ]; </script>

専門家に質問してみよう