プロが教えるわが家の防犯対策術!

phpスクリプトで、2つのコンボボックスを連動させる処理を書こうとして躓いているので教えて下さい。

勘定科目(コンボボックスA)を選択すると、それに付随する補助科目(コンボボックスB)を選択させる、というものです。

コンボボックスAをクリックした時に、JabascriptでコンボボックスBの中身を入れ替える例はネット上での記事でよく見かけるのですが、コンボボックスの中身をデータベースで設定する必要があるため、その部分はJavascriptでは無理なことは判りました。

このため、データベースのアクセス部分はPHPで取得して、配列に書き出し、Javascript内で、その配列からコンボボックスAの選択値に従って絞り込みを行って、コンボボックスBの中身を置き換えることが出来れば可能だと思いつきました。

そのためには、PHPで作成した配列を、Javascriptに渡してその値にアクセスする方法さえわかれば何とかなりそうだと思い、配列をJSONデータに変換して、Javascriptに渡して処理をするサンプルを作ってみました。

しかし、JSONデータの使い方、Javascriptに渡した時、どんな構造になっているのか判らず、その取扱い方がよく判りません。

下記のようなデータのアクセス方法を教えて頂けないでしょうか?

<html>
<head>
</head>
<body>
<?php
// コンボ2の値を配列にセット。実際にはデータベースにアクセスして取得する
$hjary=array();
$hjary[] = array('kmcd'=>'1111', 'hjcd'=>'1', 'name'=>'現金');
$hjary[] = array('kmcd'=>'1111', 'hjcd'=>'2', 'name'=>'小口現金');
$hjary[] = array('kmcd'=>'1112', 'hjcd'=>'1', 'name'=>'三菱UFJ');
$hjary[] = array('kmcd'=>'1112', 'hjcd'=>'11', 'name'=>'三井住友');
$hjary[] = array('kmcd'=>'1112', 'hjcd'=>'1', 'name'=>'名古屋');
$hjary[] = array('kmcd'=>'1113', 'hjcd'=>'1', 'name'=>'日本生命');
$hjary[] = array('kmcd'=>'1113', 'hjcd'=>'2', 'name'=>'住友生命');
foreach($hjary as $hj)
echo '科目CD:'.$hj['kmcd'].' 補助科目CD:'.$hj['hjcd'].' 名称:'.$hj['name']."<br>";
$hj = json_encode($hjary);
?>

<SCRIPT type ="text/javascript">
var ary = JSON.parse('<?php echo $hj; ?>');
</SCRIPT >

<SCRIPT type = "text/javascript">
<!--
function sel2_change()
{
var sel1 = document.forms.f1.sel1;
var sel2 = document.forms.f1.sel2;

var selkey = sel1.options[sel1.selectedIndex].value;
//
// ここでJSON?配列?の値から動的にコンボボックスにセットしたい
//
sel2.options[0] = new Option(xxx);
sel2.options[1] = new Option(yyy);
sel2.options[2] = new Option(zzz);
}
-->
</script>

<form name="f1" action="ary02.php" method="post">
<SELECT name=sel1 onChange="sel2_change()">
<option name=1111 value='1111'>現金
<option name=1112 value='1112'>当座預金
<option name=1113 value='1113'>有価証券
</SELECT>

<SELECT name=sel2>
</SELECT>
<input type="submit" name="submit" value="検索" onclick="return checkForm();" />
</form>

</body>
</html>

A 回答 (1件)

<!-- PHP で埋め込み -->


<script type="application/json" name="hojokamoku">
<?php echo json_encode($hjary); ?>
</script>

<!-- JS で読み取り -->
<script type="text/javascript">
var 補助科目一覧 = JSON.parse(document.scripts['hojokamoku'].textContent);
補助科目一覧.forEach(function(v){
_ if (v.kmcd != 画面選択した勘定科目) return;
_ var option = document.createElement('option');
_ option.data = v.hjcd;
_ option.textContent = v.name;
_ 補助科目のSELECT要素.appendChild(option);
});
</script>
    • good
    • 0
この回答へのお礼

Ogre7077さん コメント有難うございました。

JSONデータに参照できない原因は構文ではなくて、IEのせいだということ判明しました。

ご指摘のような書き方もサンプルとしてありましたが、今いち理解できなくて、
var ary = JSON.parse('<?php echo $hj; ?>');
(略)
for(var v in ary) {
if (ary[v].kmcd == sel1.value){
sel2.options[i] = new Option(ary[v].name);
i = i + 1;
}
}
という感じで書いていたのですが、FirefoxとChromeでは動作していたのですが、IEだけ動作しなかったので、さらに調べてみたら、json2.js をロードすれば動くという情報があったので、これで解決しました。

どうも有難うございました。

お礼日時:2017/08/09 16:30

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