jQueryでフォームSELECTを操作する場合のあれこれ
オーダーフォームなど、選択肢によってフォーム部品を変更する凝ったフォームを作成する機会が多く、自分用の虎の巻では対応し切れなくなってきたので、ちょっと纏めてみました。
先ずはSELECTに関して書いてみます。
配列からフォームSELECTを作る
データベースから、例えばプラン名などを取り出してセレクトに設定したいケースなど。
var Array1 = { 'id_':'▽','id_1':'りんご','id_2':'みかん','id_3':'ぶどう','id_4':'もも','id_5':'すいか' };
var key;
for (key in Array1){
var val = key.replace("id_", "");
var $option = $('<option>')
.val(val)
.text(Array1[key]);
$("#select_1").append($option);
}
valueを設定しない場合はもっと簡単ですが、こんな感じです。
で、なぜvalueを単純に1,2,3…とせず、id_1,id_2….としているかですが、javascriptで書いた連想配列のキーが数値の場合、その順序が担保されないようなのです。普通に順序通り並ぶと思いがちなのですが、ChromeやIEなどは勝手にソートしてくれちゃいます。Firefoxは順序通り。
なのでキーを文字列にしてid_を取り除き、順序通り並ぶようにしています。
選択されているものを得る
$(document).on('click','#btn_1_1',function(){
var val = $('#select_2 option:selected').val();
});
$(document).on('click','#btn_1_2',function(){
var val = $('#select_2 option:selected').text();
});
選択されたselectのvalueとtextを得ます。
SELECTに追加する
既にあるselectに対して前か後ろに追加します。
先頭に追加
$(document).on('click','#btn_3_1',function(){
var opt = $("#input_3_1").val();
var val = $("#input_3_2").val();
if(opt && val){
$('#select_3').prepend($('<option>').html(val).val(opt));
}
});
後ろに追加
$(document).on('click','#btn_3_2',function(){
var opt = $("#input_3_1").val();
var val = $("#input_3_2").val();
if(opt && val){
$('#select_3').append($('<option>').html(val).val(opt));
}
});
指定した要素を削除する
$(document).on('click','#btn_4',function(){
add_select4();
var delete_val = $("#select_4_1").val();
$('#select_4 option[value='+delete_val+']').remove();
});
selectから特定の要素を削除したい場合ですね。
全て削除する
$(document).on('click','#btn_5',function(){
$('#select_5 > option').remove();
});
空のselectに対して追加する場合は、最初に削除しておくとゴミが残りません。
何番目が選択されたかを得る
$(document).on('click','#btn_6',function(){
var idx = jQuery("#select_6").prop("selectedIndex");
$("#text_6").html(idx+'番目が選択されています');
});
使用頻度はそう多くないと思いますが、何かの案件で良く使った気がするので。
このくらい覚えておけば後は応用で色々と使えると思います。




