![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?c9bd177)
セレクトボックスの値を動的に変更させたいと思っております。
1・大カテゴリーのセレクトボックスのみ表示
2・大カテゴリーのセレクトボックスからいずれかを選択
3・大カテゴリーのセレクトボックスが選択されたら小カテゴリーのセレクトボックスを表示
4・小カテゴリーのセレクトボックスからいずれかを選択
一般的なものかと思うのですが実現したいのは上記の通りです。
動的に変更する値はdbから取得した配列で以下のような形式になるかと思います。
$max_cate[1] = '大カテゴリー1';
$max_cate[2] = '大カテゴリー2';
$max_cate[3] = '大カテゴリー3';
$min_cate[1][1] = '小カテゴリー1_1';
$min_cate[1][2] = '小カテゴリー1_2';
$min_cate[1][3] = '小カテゴリー1_3';
$min_cate[2][1] = '小カテゴリー2_1';
$min_cate[2][2] = '小カテゴリー2_2';
$min_cate[2][3] = '小カテゴリー2_3';
$min_cate[3][1] = '小カテゴリー3_1';
$min_cate[3][2] = '小カテゴリー3_2';
$min_cate[3][3] = '小カテゴリー3_3';
大カテゴリーのキーと小カテゴリーのキーが紐づく形式で考えております。
方法が全くわからず『php ajax』で検索してみましたが参考になるようなものがみつからず質問させて頂きました。
参考程度でも構いませんので具体的な方法か参考になるサイトがありましたら是非教えて頂けないでしょうか?
宜しくお願い致します。
No.2ベストアンサー
- 回答日時:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "
http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitio …<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<script type="text/javascript">
//@cc_on
function createXMLHTTP( ) {
/*@if(1)
try {
return new ActiveXObject ('Msxml2.XMLHTTP.6.0');
} catch (err1) {
try {
return new ActiveXObject ('Msxml2.XMLHTTP.3.0');
} catch (err) { ; }
}
@else@*/
try {
return new XMLHttpRequest;
} catch (err) { ; }
/*@end@*/
return null;
}
function changeListener( evt ) {
var target = evt./*@if(1) srcElement @else@*/ target /*@end@*/;
if( target.name == 'CATEGORY' ) {
subCateRequest( target.form, target, target.form.elements['REQUEST_URI'].value, target.name, target.value );
}
}
function subCateRequest( form, cate, uri, name, value ) {
var req = createXMLHTTP();
var query = encodeURIComponent( name ) + '=' + encodeURIComponent( value );
var json;
if( req ) {
req.open( 'GET', uri + '?' + query, true );
req.onreadystatechange = function() {
if( req.readyState == 4 ) {
try{
if( req.status == 200 ) {
json = decodeURIComponent( req.responseText );
json && makeSubCate( form, cate, eval( json ) );
}
}catch(e){
;
}finally{
req.onreadystatechange = new Function();
form = cate = uri = name = value = null;
req = query = json = null;
}
}
};
req.send( '' );
}
}
function makeSubCate( form, cate, items ) {
var subCate;
var doc = form.ownerDocument || document;
var i, option;
if( 'undefined' == typeof form.elements[ 'SUB_CATEGORY' ] ) {
subCate = doc.createElement( /*@if(1) '<select name="SUB_CATEGORY">' @else@*/ 'SELECT' /*@end@*/ );
subCate.name = 'SUB_CATEGORY';
cate.parentNode.appendChild( subCate );
} else {
subCate = form.elements[ 'SUB_CATEGORY' ];
subCate.innerHTML = '';
}
for( i=0; i<items.length; i++ ) {
option = doc.createElement( 'OPTION' );
option.value = i;
i == 0 && ( option.selected = true );
option.appendChild( doc.createTextNode( items[ i ] ) );
subCate.appendChild( option );
}
}
</script>
</head>
<body>
<form action="#">
<p>
<input type="hidden" value="./test.php" name="REQUEST_URI">
<select name="CATEGORY" onchange="changeListener( event );">
<option value="0" selected="selected">none</option>
<option value="1">カテゴリー1</option>
<option value="2">カテゴリー2</option>
<option value="3">カテゴリー3</option>
</select>
</p>
</form>
</body>
</html>
=========== test.php ==============
<?php
$min_cate = Array(
Array(
'',
'',
'',
''
),
Array(
'none',
'小カテゴリー1_1',
'小カテゴリー1_2',
'小カテゴリー1_3'
),
Array(
'none',
'小カテゴリー2_1',
'小カテゴリー2_2',
'小カテゴリー2_3'
),
Array(
'none',
'小カテゴリー3_1',
'小カテゴリー3_2',
'小カテゴリー3_3'
)
);
if( isset( $_GET ) && $_GET[ 'CATEGORY' ] ) {
header( 'Contet-Type: text/plane; charset=UTF-8' );
$json = '["'.implode( '","', $min_cate[ $_GET[ 'CATEGORY' ] ] ).'"]';
echo rawurlencode( mb_convert_encoding( $json, 'UTF-8', 'EUC-JP' ) );
}
?>
やってることは、GET で飛ばして、JSON で受け取ってるだけです。
request 部分は、手書きでも、jQurey でも、prototype でも、お好きなものを。
受け取りも、JSON に限らず、XML でも。データを受け取るだけだから、JSON かなと、
# 全角でインデントが入れてあるので、タブ文字などに変換してください。
この回答への補足
お返事ありがとうございます。
なんとなくですがphpの場合jsonを使用するというのが一般的な傾向が見られたのですが
jsonは全く触った事がないのでどう使うものかすらわかりませんでした^^;
詳しく例を教えて頂き大変参考になりました。1つ目のセレクトボックスを選んで2つ目を選びますよね。
ここで2つ目を選択しているじょうたいで1つ目のセレクトボックスの値をデフォルトにすると
2つ目のセレクトボックスが消えなくても値をデフォルトにする事ってできませんでしょうか?
現状ですと両者のセレクトボックスの値を選択し1つ目の値をデフォルトにしても2つ目の値は
そのままになってしまいます。
可能であれば方法を教えて頂けますと幸いです。
No.3
- 回答日時:
データベースが膨大ならAjaxということになるのかも知れませんが、それほどでもないならこんな方法(↓)でもいけると思います。
都度送受信しなくても良いし、javasciptオフの場合も対応可能なので…
http://d.hatena.ne.jp/Mars/20071109
お返事ありがとうございます。
これはまたシンプルでいいですね。基本的に膨大な量にはならない予定なので一度試してみたいと思います!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP 入力した部分を表示させたまま(保持)するにはどうすれば良いでしょうか? 1 2023/01/25 11:14
- その他(IT・Webサービス) グーグル検索に「カテゴリー」機能が追加されたら、便利ですか。それとも不必要ですか。 2 2023/02/13 11:56
- HTML・CSS サイトのカテゴリーの表示名を教えてください。画像有り 2 2022/08/10 02:09
- MySQL [1000地域 × 10カテゴリー = 1万件のテーブル]!グループ化? 1 2023/06/14 23:56
- 教えて!goo 教えて!gooには、なぜこのカテゴリーがないのだろう?と思うカテゴリーを教えて下さい。 なぜこのカテ 4 2023/02/10 23:07
- 教えて!goo こんなカテゴリーがあったら良いのに。こんなカテゴリーがあると良い。 11 2022/08/13 21:10
- 教えて!goo カテゴリーを逆引きする機能はありませんか? 3 2022/07/11 20:25
- C言語・C++・C# プログラミングを教えて欲しいです。 配列aは、int a[9]={7,6,12,8,3,5,10,9 4 2022/12/19 23:27
- 哲学 【哲学カテゴリーで人生相談しても何一つ解決しないのはなぜですか?】全ての答えが抽象的に 3 2022/09/13 21:24
- JavaScript ソースコードのいじる場所が分かりません。 1 2022/12/23 02:06
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
selectを変更不可にしたい
-
VBScriptでHTMLのセレクトボッ...
-
プルダウンのoptionの表示・非...
-
ラジオボタンとプルダウンを連...
-
javascriptでセレクトボックス...
-
javascriptで合計金額を算出し...
-
セレクトボックスを未選択の状...
-
select option value が IE だ...
-
2段階プルダウンで1段階目の選...
-
子ウインドウから親ウインドウ...
-
セレクトメニューの値をクッキ...
-
プルダウン選択を変更すると、...
-
select要素のvalueを配列で取得...
-
テキストエリアの文字列を切り...
-
Selectボックスの一覧表示方法
-
同一ページに複数のプルダウン...
-
2つのセレクトボックスで選ば...
-
プルダウンメニューに連動する...
-
hiddenに値を設定する方法
-
ホームページビルダーのリンク切れ
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
プルダウン選択を変更すると、...
-
selectを変更不可にしたい
-
javascriptでセレクトボックス...
-
全てのselect要素をデフォルト...
-
Selectボックスの一覧表示方法
-
リストボックス内の重複したも...
-
プルダウンの値によって活性・...
-
VBScriptでHTMLのセレクトボッ...
-
セレクトボックスで配列を呼び...
-
JavaScriptで<select>の<option...
-
ラジオボタンとプルダウンを連...
-
selectを使った計算
-
select要素のvalueを配列で取得...
-
<input>の選択肢をプルダウンメ...
-
javascriptでoptionタグを削除...
-
今日の日付を自動的にセレクト...
-
検索窓とプルダウンメニュー機...
-
【javascript】連想配列からセ...
-
同じ名前のセレクトがある場合...
-
selectボックスの選択結果を変...
おすすめ情報