2009-03-13
jQuery getJSON()でセレクトボックスの項目を動的生成
SAStruts アクションにJSONを返すメソッドを作成してみる - 130単位
前回の続きです。やりたいことは以下。
部署: 従業員:
- 2つのセレクトボックス
- 片方の選択により、Ajaxでもう片方の項目を動的生成
前回はSAStrutsでサーバー側のJSONを返す処理を作成しました。今回はクライアント側のJavaScriptです。jQueryを使います。getでJSONを取得するメソッドのリファレンスを確認します。
jQuery.getJson( url, data, callback )
no title
引数は順に、リクエストURL、パラメータ、コールバック関数、です。
これを、部署のセレクトボックスのonChangeイベントに設定します。
$("#departmentId") .change(function(){ $("#employeeId").empty(); var departmentId = $(this).val(); if (departmentId == "") { return; } $.getJSON( "ajaxEmployeeList", {"departmentId" : departmentId}, function(employeeList){ var optionItems = new Array(); optionItems.push(new Option("", "")); for (key in employeeList) { optionItems.push(new Option(employeeList[key], key)); } $("#employeeId").append(optionItems); }); });
簡単に解説してみます。
- 従業員のセレクトボックスを空にする
- 選択中の部署idを取得 → 空白なら何もせず
- getJSON()でAjaxリクエスト
ちなみに上記コードのリクエストURLの指定は、SAStrutsでは同アクション内にメソッドを定義した場合です。URLの最後に"/"は入れても入れなくてもいいみたいです。
ただし、これだとFirefox等では動きますがIE6では動きません。
IEにjQueryでselectのoptionを追加できない - toyosystem http://www.jamboree.jp/cms/archives/90
どうもIE6のバグでappend()がうまくいかないようです。というわけで、上記記事を参考にIE6に対応するようにしてみます。
IE6対応版
select要素のDOMを利用して、options[]プロパティに1つずつ追加していきます。
$.getJSON(
"ajaxEmployeeList",
{"departmentId" : departmentId}
function(employeeList){
var select = document.getElementById("employeeId");
var i = 0;
select.options[i++] = new Option("", "");
for (key in employeeList) {
select.options[i++] = new Option(employeeList[key], key);
}
});
IE6対応版その2
社内にあったとあるソースコードではこんなやり方をしていました。html文字列を配列に格納しておいて、最後に連結して追加しています。この場合だとjQueryのappend()が効くようです。
$.getJSON(
"ajaxEmployeeList",
{"departmentId" : departmentId},
function(employeeList){
var optionItems = new Array();
optionItems.push('<option value=""></option>');
for (key in employeeList) {
optionItems.push('<option value="' + key + '">' + employeeList[key] + '</option>');
}
$("#employeeId").append(optionItems.join());
});
トラックバック - http://d.hatena.ne.jp/deeeki/20090313/getjsonselect
リンク元
- 292 http://www.google.co.jp/search?hl=ja&client=firefox-a&rls=org.mozilla:ja:official&hs=X7Q&q=jquery+セレクトボックス+onchange&btnG=検索&lr=lang_ja
- 215 http://www.google.co.jp/search?sourceid=navclient&hl=ja&ie=UTF-8&rlz=1T4GGLJ_jaJP177JP177&q=ie8+セレクトボックス
- 148 http://www.google.co.jp/url?sa=t&rct=j&q=jquery select option 追加&source=web&cd=2&ved=0CCgQFjAB&url=http://d.hatena.ne.jp/deeeki/20090313/getjsonselect&ei=Mi2ETs6CF6rwmAWKiI0a&usg=AFQjCNEmQnEWg3RQwY6SXVQ2aIeasrqE2g&sig2=uv
- 132 http://b.hatena.ne.jp/entry/d.hatena.ne.jp/deeeki/20090313/getjsonselect
- 129 http://www.google.co.jp/search?sourceid=chrome&ie=UTF-8&q=jquery+getjson+ruby
- 118 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=2&ved=0CDEQFjAB&url=http://d.hatena.ne.jp/deeeki/20090313/getjsonselect&ei=hsAoT4urAqWUiQfZy_3mAg&usg=AFQjCNEmQnEWg3RQwY6SXVQ2aIeasrqE2g&sig2=zCwYEDwj4mYN1DfOSWgDqA
- 109 http://www.google.co.jp/search?q=jquery+セレクトボックス&lr=lang_ja&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ja:official&client=firefox
- 104 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0CDEQFjAA&url=http://d.hatena.ne.jp/deeeki/20090313/getjsonselect&ei=CrEiT4W0L8m1iQf5rqXVBA&usg=AFQjCNEmQnEWg3RQwY6SXVQ2aIeasrqE2g
- 99 http://www.google.co.jp/search?q=jquery+getjson&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ja:official&client=firefox-a
- 92 http://www.google.co.jp/url?sa=t&rct=j&q=jquery getjson&source=web&cd=17&ved=0CEkQFjAGOAo&url=http://d.hatena.ne.jp/deeeki/20090313/getjsonselect&ei=jSPDTs3gE8eKmQWzwbSKCw&usg=AFQjCNEmQnEWg3RQwY6SXVQ2aIeasrqE2g





