jQueryでセレクトボックスの取得・代入・追加・削除・イベントまとめ【サンプル有】
Jqueryで扱うフォーム部品のセレクトボックスの操作についてまとめました。(プルダウンリストとも言います)
要素の指定ですが、class、id、nameそれぞれ、セレクタの指定方法が異なるので覚えておきましょう。
//class要素を取得
var text = $('.test1').val();
//id要素を取得
var text = $('#idtest1').val();
//name要素を取得
var text = $('[name="nametest1"]').val();
この記事ではすべてclass要素を取得する例として説明しております。
セレクトボックスに現在選択されている値を取得する

現在選択されている<select>要素の値の取得は、$('要素').val()で取得できます。
<select class="test1">
<option value="1">選択肢1</option>
<option value="2">選択肢2</option>
<option value="3">選択肢3</option>
</select>
<input type="button" class="button1" value="入力内容を取得する">
<script>
$(function(){
//ボタンが押されたら選択内容をアラートで表示する
$('.button1').click(function(){
var text = $('.test1').val();
alert(text);
});
});
</script>
セレクトボックスの現在選択されている値を変更する

現在選択されている<select>の変更は、$('要素').val(変更したい値)で取得できます。
<select class="test1_1">
<option value="1">選択肢1</option>
<option value="2">選択肢2</option>
<option value="3">選択肢3</option>
</select>
<input type="button" class="button1_1" value="入力内容を選択肢3に変更する">
<script>
$(function(){
//ボタンが押されたら選択肢3に変更する
$('.button1_1').click(function(){
$('.test1_1').val('3');
});
});
</script>
セレクトボックスの現在選択されている値が何番目か取得する

現在選択されている<select>要素が何番目かは、$('要素').prop('selectedIndex')で取得できます。
先頭を0として数えますのでご注意ください。
<select class="test2">
<option value="1">選択肢1</option>
<option value="2">選択肢2</option>
<option value="3">選択肢3</option>
</select>
<input type="button" class="button2" value="入力内容を取得する">
<script>
$(function(){
//ボタンが押されたら入力内容をアラートで表示する
$('.button2').click(function(){
var no = $('.test2').prop('selectedIndex');
alert(no);
});
});
</script>
何番目かを選択状態にしたい場合は、selectedIndexの第二引数に指定する
応用で、「セレクトボックスの〇番目を選択したい」といった場合は、$('要素').prop('selectedIndex', 数値)で設定できます。
こちらも0から数えて設定になりますのでご注意ください。(1の場合は上から2番目です)
$('.test2').prop('selectedIndex', 1);
セレクトボックスの現在選択されている値のテキストを取得する

現在選択されている<select>要素が何番目かは、$('要素 option:selected').text()で取得できます。
<select class="test3">
<option value="1">選択肢1</option>
<option value="2">選択肢2</option>
<option value="3">選択肢3</option>
</select>
<input type="button" class="button3" value="現在選択されているテキストを取得する">
<script>
$(function(){
//ボタンが押されたら入力内容をアラートで表示する
$('.button3').click(function(){
var text = $('.test3 option:selected').text();
alert(text);
});
});
</script>
セレクトボックスの選択時にイベントを発火する

<select>要素を変更した際にイベントを実行したい場合は、$('要素').change(function(){処理})で行えます。
<select class="test4">
<option value="1">選択肢1</option>
<option value="2">選択肢2</option>
<option value="3">選択肢3</option>
</select>
<script>
$(function(){
//ボタンが押されたら入力内容をアラートで表示する
$('.test4').change(function(){
var text = $(this).val();
alert(text);
});
});
</script>
イベントを引き起こした要素を取得できる$(this)を使用して、発生元の値をアラートしています。
参考 jQueryで$(this)の使い方【サンプルコード有】
セレクトボックスの内の値、テキストすべてを取得する
<select>要素の値、テキストをすべて取得したい場合は、$('要素 option').eachでoption内の要素を繰り返すことで取得できます。
下記の例は取得した値とテキストを配列に代入し、改行区切りのアラートで表示しています。
<select class="test5">
<option value="1">選択肢1</option>
<option value="2">選択肢2</option>
<option value="3">選択肢3</option>
</select>
<input type="button" class="button5_1" value="値をすべて取得する">
<input type="button" class="button5_2" value="テキストをすべて取得する">
<script>
$(function(){
//値をすべて取得する
$('.button5_1').click(function(){
var aryCmp = [];
$('.test5 option').each(function(key, value){
aryCmp.push($(value).attr('value'));
});
alert(aryCmp.join("\r\n"));
});
//テキストをすべて取得する
$('.button5_2').click(function(){
var aryCmp = [];
$('.test5 option').each(function(key, value){
aryCmp.push($(value).text());
});
alert(aryCmp.join("\r\n"));
});
});
</script>
セレクトボックスのoption要素を追加する(選択肢を追加)
<select>要素の最後に値を追加する場合は、$('要素').append($('<option>').html('追加する項目名').val('追加する値'));で行えます。
先頭に追加したい場合はappendではなくprependに置き換えてください。
<select class="test6">
<option value="1">選択肢1</option>
<option value="2">選択肢2</option>
<option value="3">選択肢3</option>
</select>
<script>
$(function(){
//末尾に追加
$('.test6').append($('<option>').html('選択肢4').val('4'));
//先頭に追加
$('.test6').prepend($('<option>').html('選択肢0').val('0'));
});
</script>
セレクトボックスのoption要素を削除する(選択肢を削除)
<select>要素の中身を削除する場合、.removeを使います。
参考 jQueryで要素を空にするemptyと削除するremoveの使い方
削除先の指定方法はいくつか手段があるので、用途に応じてお使いください。
下記のサンプルでは、
n番目の要素を削除、最初の要素を削除、最後の要素を削除、選択されている要素を削除を試しています。
<select class="test7">
<option value="1">選択肢1</option>
<option value="2">選択肢2</option>
<option value="3">選択肢3</option>
<option value="4">選択肢4</option>
<option value="5">選択肢5</option>
<option value="6">選択肢6</option>
<option value="7" selected="selected">選択肢7</option>
<option value="8">選択肢8</option>
<option value="9">選択肢9</option>
</select>
<script>
$(function(){
//0から数えて4番目の要素を削除(選択肢5)
$('.test7 option:eq(4)').remove();
//最初の選択肢を削除(選択肢1)
$('.test7 option:first-child').remove();
//最後の選択肢を削除(選択肢9)
$('.test7 option:last-child').remove();
//現在選択されている要素を削除(選択肢7)
$('.test7 option:selected').remove();
});
</script>
配列をセレクトボックスのoptionに設定する
配列の中身を<select>として設定したい場合は、配列の中身を繰り返しappendしましょう。
下記の例では、事前に入っているoption要素を全削除し、すべて配列に置き換えて表示しています。
<select class="test8">
<option value="1">選択肢1</option>
<option value="2">選択肢2</option>
<option value="3">選択肢3</option>
</select>
<script>
$(function(){
$('.test8 option').remove();
var aryCmp = [];
aryCmp = ['りんご', 'みかん', 'ぶどう'];
$.each(aryCmp, function(key, value){
$('.test8').append($('<option>').html(value).val(value));
});
});
</script>
後から(動的に)追加されたセレクトボックスにイベントを設定する
JavaScriptやAjaxからテキストボックスを生成した場合、要素を指定しても、事前に設定しておいたイベントは実行できません。
イベント設定時にその要素はまだ存在しなかったからです。
後から追加された要素にも設定したイベントを発火したい場合は、$(doument).onで実行しましょう。
<div class="js_area"></div>
<script>
$(function(){
//内容を変更したらアラートを実行(要素がないため、これは実行されない)
$('.test9').change(function(){
alert('changed!');
});
//内容を変更したらアラートを実行(documentの中から拾っているため、これは実行される)
$(document).on('change', '.test9', function(){
alert('changed!!!');
});
//js_areaにセレクトボックスを生成する
$('.js_area').html('<select class="test9"><option value="1">選択肢1</option><option value="2">選択肢2</option><option value="3">選択肢3</option></select>');
});
</script>
こうすることで、document要素(要はページ全体)にイベントが設定され、それが「.test9」だった場合処理を行う、という流れになるため、後から追加された要素も対応できます。
2つのセレクトボックスを連動させる
1つ目のセレクトボックスを選んだら、その選択内容によって2つ目のセレクトボックスの候補を変更したい場合の処理です。
1つ目のセレクトボックスの値に応じて表示させたい候補を、2つ目のセレクトボックスの「data-sel」に設定し、eachによる繰り返し処理で判定を行います。
<select name="test10-1">
<option value="0">選択してください</option>
<option value="1">セリーグ</option>
<option value="2">パリーグ</option>
</select>
<select name="test10-2">
<option data-sel="0" value="0">リーグを選択してください</option>
<option data-sel="1" value="1">ジャイアンツ</option>
<option data-sel="1" value="2">ベイスターズ</option>
<option data-sel="1" value="3">タイガース</option>
<option data-sel="1" value="4">カープ</option>
<option data-sel="1" value="5">ドラゴンズ</option>
<option data-sel="1" value="6">スワローズ</option>
<option data-sel="2" value="1">ライオンズ</option>
<option data-sel="2" value="2">ホークス</option>
<option data-sel="2" value="3">イーグルス</option>
<option data-sel="2" value="4">マリーンズ</option>
<option data-sel="2" value="4">ファイターズ</option>
<option data-sel="2" value="4">バファローズ</option>
</select>
<script>
$(function(){
//事前に2つ目のセレクトボックスの情報を取得しておく
var targetSelect = $('[name="test10-2"]');
var targetOption = targetSelect.find('option');
//1つ目のセレクトボックスを選んだ場合
$('[name="test10-1"]').change(function(){
var sel = $(this).val();
targetSelect.empty();
targetOption.each(function(key, value){
if($(value).data('sel') == sel){
targetSelect.append(value);
}
});
targetSelect.prop('selectedIndex', 0); //最初の候補を選択に変更
});
//リロード時対策
$('[name="test10-1"]').trigger('change');
});
</script>
<select>はjQueryで操作しやすく、フォーム部品としてはよく使われる要素ですが、端末によっては使いづらいUIでもあります。
各端末別の仕様も把握しておきましょう。
他のフォームのjQuery操作も合わせてご確認ください。
また、jQueryの各種イベントについても実行サンプルソース付きでまとめておりますので、こちらもご確認ください。
以上、jQueryでセレクトボックスの取得・代入・追加・削除・イベントまとめ、でした。

ディスカッション
コメント一覧
まだ、コメントがありません