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>
No.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>
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 をロードすれば動くという情報があったので、これで解決しました。
どうも有難うございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript 以前の質問だと、どの条件でも配列が表示されてしまいます。 1 2022/07/09 11:40
- JavaScript sessionStorageを調べています。 1 2023/06/20 12:41
- JavaScript セレクトボックスを2つ選択してメッセージなどを表示するには。~運賃検索プログラムを完成させたい~ 1 2022/07/22 11:10
- JavaScript セレクトボックスで配列を呼び出したい。 1 2022/07/08 20:14
- JavaScript javascript作成してます。ラジオボタンで判定するコードを書いてます。 1 2023/07/18 11:03
- JavaScript JavascriptからSQLへ繋ぎ方が分からない 3 2022/07/07 00:27
- JavaScript switch文のswitch(n)の部分を複数の値にするか、if文に変えてほしいです。 1 2022/07/27 17:18
- JavaScript ①入力フォーム→②確認表示画面→③送信完了画面のコードを書いているのです、 入力フォームから受け取っ 2 2022/05/10 16:45
- JavaScript console.logがどうしても2つ機能しないのでアドバイスをくださいお願いします 2 2022/07/07 22:13
- JavaScript セレクトボックスを2つ設けて選択して初めてメッセを表示 1 2022/07/27 12:15
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Javascript のカプセル化について
-
Javascriptでのbuttonのname属...
-
name属性のないformタグの、中...
-
jQueryで属性連番処理を、複数...
-
フォーム内の同一名のエレメン...
-
doPostBack 関数について
-
タイムテーブルを作りたいので...
-
新しくフォルダを作成したい
-
リンクへのフォーカス
-
OnClickでURL生成し、飛ばしたい
-
name="shocd"はなんのタグでし...
-
【jQuery】input nameの文字列...
-
フォーム内容を上から順番にJav...
-
プルダウンで選択すると、DBの...
-
return trueとreturn falseの用...
-
複数のselect値で1つも選択され...
-
正規表現で複数マッチ条件で悩...
-
スクロールバーの表示位置を変...
-
UWSCのIE操作でプルダウンを選...
-
テキストエリアに入力した改行...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【jQuery】input nameの文字列...
-
javascriptの値をformのinput h...
-
JavaScriptにて動的に配列を作...
-
新しくフォルダを作成したい
-
二つの入力欄に、同時に同じ文...
-
Javascriptでのbuttonのname属...
-
name属性のないformタグの、中...
-
出発駅A、到着駅Bを選択すると...
-
テキストボックスの入力をリセット
-
ASP.NETでNAME属性を固定にしたい
-
submitボタン押下時にPOSTされ...
-
ラジオボタンでクリックした値...
-
テキストボックスの値同士を比...
-
jqueryでtextareaのcols、rows...
-
入力フォームに半角スペース以...
-
cookie使用時にundefinedと表示...
-
ファイル選択ダイアログが表示...
-
テキストエリアをenterキーでフ...
-
ボタンを押すとテキストボック...
-
hiddenを動的に作成したい
おすすめ情報