dポイントプレゼントキャンペーン実施中!

cakephpとjavascriptを使っています。

window.openで子画面を出し、子画面上の例えば[設定]ボタンを押した時に子画面を閉じ、
子画面上のフォームの値を、親画面に反映させたいため調べてなんとか出来ました。

子画面の方でdocument.form.target = 'parent';に設定しただけで出来たので結果はいいのですが、
targetを設定しない場合でも、親画面でデータが取得できているのに表示出来なかったのが、
納得いかなくて質問しました。

function [設定]ボタンで呼ばれる関数(){

document.form.action = "/~/TestController/input"; 省略しています
    ☆document.form.target = 'parent'; 
document.form.submit();
window.close();
}

☆の行がない場合でも、
TestController内のinputメソッドでは$this->dataにフォームの値は入っていましたし、
当然親画面のinput.ctpでも$this->dataにフォームの値が入っていました。
なのに、表示出来なかったのが納得がいきません。
そうゆうもんだからと言われればそれまでですが、
きちんと理解しておきたいので、よろしくお願いいたします。

A 回答 (2件)

"parent"とはなんでしょ?window.parentとかwindow.openerのように使おうとしてるのでしょうか。


"parent"という名前がついてたりで動作してるのならいいのですが。
値は入っているが表示はされない、というのがログ等では確認できるという意味ならば
親ウィンドウではなく違うとこに送信されてるように思えます。
もしくはちゃんとデータが送信できているなら $this->data[Test][hoge] がダメということです。
$this が何か知りませんが、Testとhogeは文字列ではないので定数展開を試みます。
ついでにsubmit&closeはFirefoxだと送信前に閉じてしまうかと。
    • good
    • 0
この回答へのお礼

親画面に名前はつけていませんが、
document.form.target = 'parent';
としただけで親画面を認識しています。(IE8/Firefox4で確認)
ありえないですか?
動いているのですが…

input.ctpの
$this->data[Test][hoge]のデータを表示直前で、
ウォッチ式で見てみましたが、きちんと値は入っています。
ですが、表示は出来ません。

> ついでにsubmit&closeはFirefoxだと送信前に閉じてしまうかと。
submit()した後に、window.close()していますが、
問題なくデータを送信できているようです。
こちらも本来ならおかしいでしょうか。

お礼日時:2011/08/09 15:39

言ってることがよくわかんないですがちゃんと動作してないんでは。


それでは動作しない環境があると思いますし。
試しに書きましたが親にform作ってsubmitをコールした方が確実かと。

// 親
window.name = "main";
function openSub() {
window.open('sub.php', "sub");
}
<button onclick="openSub();">Open</button>

// 子
function sendToOpener() {
var form = document.getElementById("formSub");
form.target = "main";
form.action = "index.php";
form.submit();
return true;
}
<form id="formSub" method="POST">
<input type="text" name="hoge" value="hohoge" />
<a href="javascript: window.close();" onclick="return sendToOpener();">Send</a>
</form>

この回答への補足

ありがとうございます。
たくさん省略しすぎて、伝わっていなかったかもしれません。
関数名を拝借させていただきますと、
以下のような感じで書いています。

//親(input.ctp)
function openSub(){
  var sub = window.open("/~/TestController/subForm", 'sub');
  sub.focus();

  return false;
}

<p><?php echo $this->data[Test][hoge]; ?></p> ※ここに子画面の入力を表示させたい
<form name="form">
<button onclick="openSub();">Open</button>
</form>

//子(sub_form.ctp)
function [設定]ボタンで呼ばれる関数(){
  document.form.action = "/~/TestController/input"; 省略しています
  ☆document.form.target = 'parent'; 
  document.form.submit();
  window.close();
}

<form name="form">
<input name="data[Test][hoge]" type="text">
</form>

子画面で入力したTestモデルのhogeフィールドのデータを親画面の<p>タグ内に表示したいと思っています。
そこで☆の行を書くことで実現出来たのですが、
☆の行がなくても、input.ctpでは$this->dataの中にhogeフィールドのデータが入ってるにも関わらず、
表示できなかったのが疑問だったのです。

上記のコードでは動作しない環境がありますでしょうか。
よろしくお願いいたします。

補足日時:2011/08/09 09:32
    • good
    • 0

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