チョコミントアイス

PHPとjavascriptで検索(別ページ)→検索結果表示(test.php)→指定リンククリック(test.php)→チェックボックスの値を親ウィンドウ(test.php)から子ウィンドウ(aaa.php、bbb.php)へ渡し、更新→親ウィンドウ(test.php)に反映→検索ボタン押下で再検索(test.php)という流れのプログラムを書いています。

親ウィンドウ(test.php)に反映までは実装できましたが、その後検索でsubmitすると、test.phpではなくaaa.phpかbbb.phpへ遷移してしまいます。
色々試してみましたがどうしてもわからず、どなたかご教授いただけませんでしょうか。
よろしくお願い致します。

[親ウィンドウ]
function setDown(type) {
window.open("", "test") ;
if(type == 'aaa') {
window.document.fm.action = "aaa.php";
} else if(type == 'bbb') {
window.document.fm.action = "bbb.php";
}
window.document.fm.target = "test";
window.document.fm.method = "POST";
window.document.fm.submit();
}

<form action="index.php" method="post" name="fm">
<a href="javascript:void(0)" onClick="setDown('aaa');"return false>aaa指定</a>
<div id="aaaDis"></div>
<a href="javascript:void(0)" onClick="setDown('bbb');"return false>bbb指定</a>
<div id="bbbDis"></div>
<input type="text" name="keyword">
<input type="submit" name="search" value="検索">
</form>

[子ウィンドウ aaa.php]
if($_REQUEST["mode"] == "set") {
foreach($_REQUEST["sample"] as $num => $val) {
$addName .= $Func -> GetGenreName($val) . ",";
$addNo .= $val. ",";
}
$addName = rtrim($addName ,",");
$addNo = rtrim($addNo ,",");

<script type="text/javascript">
<!--
var addName = '<?php echo $addName ; ?>';
var addNo = '<?php echo $addNo ; ?>';
var sampleName = addName.split(",");
var sampleNo = addNo.split(",");

if(sampleNo) {
window.opener.document.getElementById('aaaDis').innerHTML = "";
for (var i in sampleNo){
window.opener.document.getElementById('aaaDis').innerHTML += '<input type="checkbox" name="sample[]" value="'+sampleNo[i]+'" checked>'+sampleName[i];
}
}
window.close();
// -->
</script>

}
<form action="aaa.php" method="post">
<input type="hidden" name="mode" value="set">
<input type="submit" value="設定">
<input name="sample[]" TYPE="checkbox" VALUE="1">1111



</form>

A 回答 (2件)

こんにちは。



実際に試していないのでちがっていたら申し訳ございません。

おそらく
window.document.fm.action = "aaa.php";
または
window.document.fm.action = "bbb.php";
にてformのaction先を変えてしまっているので検索を押した時もどちらかに飛んでしまいます。
(多分aaa.phpまたはbbb.phpの処理を呼ぶ前に検索するとindex.phpに飛ぶのでは)

<input type="button" value="検索" onclick="exeSearch();">
submitではなくボタンにして

function exeSearch() {
document.fm.action="./index.php";
document.fm.target = '';
document.fm.submit();
}

にすることでもとのformアクションであるindex.phpにサブミットすることができると思います。
    • good
    • 0
この回答へのお礼

LancerVII様

回答ありがとうございました。

ご教授いただきました通りに実装して動作確認できました。
サンプルソースまでご提供いただき本当にありがとうございました。

お礼日時:2012/02/10 20:15

function setDown(type)のwindow.document.fm.submit(); 


のうしろに下記2行を追加してもいけると思います。

document.fm.target = "_self";
document.fm.action="index.php";


理由は、#1の方が説明しているとおりです。
一時的なDOM操作ですので、親ウインドウを更新すると遷移先が元に戻ると思います。
FireFoxでいう、firebugのような現在のDOMを表示できるような
デバッグツールを使用すると、こういう時に対処しやすいと思います。
javascriptでDOMの操作をしても、ブラウザの「ソースの表示」には
反映されないので。
    • good
    • 0
この回答へのお礼

shaka001様

回答いただきありがとうございました。
shaka001様の言われる方法でも動きました。
とても勉強になりました。

firebugは存在は知っていましたが、使ったことがなかったので試してみたいと思います。
貴重な情報をありがとうございました。

お礼日時:2012/02/10 20:17

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