電子書籍の厳選無料作品が豊富!

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;
}
-----
宜しくお願いします。

A 回答 (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させるスクリプトを返却する必要があります。(テキストエリアの更新はしない。)

参考になりますでしょうか。

この回答への補足

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

補足日時:2008/03/21 13:22
    • good
    • 0

phpは読めませんが、この現象はたぶん、子画面で別フレームに処理させようとしているけれども、その前にwindow.close();してしまっているのが原因と思います。

(alertがあるとその間に処理できる)
なので、syori.phpの値変更の後にwindow.close();を移せばうまくいくかもしれません。

この回答への補足

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

補足日時:2007/12/31 14:44
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!