[JavaScript] bootstrap-select のセレクトボックスを選択状態にする
bootstrap-select は、Bootstrap のデフォルトデザインのセレクトボックスより、見た目をかっこよくしてくれる Bootstrap ライブラリ。 bootstrap-select で作ったセレクトボックスを選択済みの状態にしたいが、 select 要素の val に値をセットする普通のやり方だとうまくいかなかったので、解決法をメモ。
やりたいこと
セレクトボックス A で値が選択されたら、セレクトボックス B に同じ値をセットして選択済みの状態にするため、 jQuery でセレクトボックス A の値を取得し、セレクトボックス B にセットしたい。
普通のセレクトボックスなら、 val() に値をセットするだけで選択状態にできる。
id = "selectB" という select 要素があったらこう書ける。
// value はセットしたい値
$('#selectB').val(value);
しかし、 bootstrap-select を使っていると( val に値はセットされているようだが)、テキスト部分が変わらず、選択状態にならない。
解決した方法
調べると 2 つの方法が見つかった。
方法 1
selectpicker で値をセットするにはこのように書くようだ。
$('.selectpicker').selectpicker('val', 'VALUE');
// 複数選択可にしている場合、
$('.selectpicker').selectpicker('val', ['VALUE1','VALUE2']);
これは、以下と同様。
$('.selectpicker').val('VALUE');
$('.selectpicker').selectpicker('render');
$('.selectpicker') は $('#id') でもいい。
change イベントは、ユーザー操作からのみ発火するため、直接 val() メソッドを呼び出しても bootstrap-select の ui は変化しないらしいが、この書き方だと ui 部分がリフレッシュされる。
方法 2
val をセットした後、リフレッシュする。
$('.selectpicker').val('VALUE');
$('.selectpicker').selectpicker('refresh');
val() メソッドを直接呼び出した場合には、 ui 部分が更新されるメソッドを、自分で呼び出さなければならない。