Rails 5でsemantic-uiのmultipleなselectを使っているときに、初期値としてselectedされた値が表示されずに困っていた。 これはStackoverflowに書いてあった解決策だが、一旦option文のselectedを削除してからsemantic-uiのdropdown関数を呼び出しjavascriptからset selectedして、最後にoption文のseletctedを追加して元に戻しておく、というwalkaroundで解決した。以下に、coffeescript版を掲載しておく。
$(document).on 'ready turbolinks:load', ->
$('.ui.dropdown').each ->
$that = $(this)
values = $that.val()
$('option', $that).each ->
$(this).removeAttr 'selected'
return
$that.dropdown 'set selected', values
$('option', $that).each ->
curr_value = $(this).val()
i = 0
while i < values.length
if values[i] == curr_value
$(this).attr 'selected', 'selected'
i++
return
で、これで解決と言いたいところだが、もう一工夫必要だった。selectedされてない場合はdropdown関数を呼ぶだけにすべき。
$(document).on 'ready turbolinks:load', ->
$('.ui.dropdown').each ->
$that = $(this)
if $that.attr('multiple') && $('option[selected]', $that).length > 0
values = $that.val()
$('option', $that).each ->
$(this).removeAttr 'selected'
$that.dropdown 'set selected', values
$('option', $that).each ->
curr_value = $(this).val()
i = 0
while i < values.length
if values[i] == curr_value
$(this).attr 'selected', 'selected'
i++
else
$(this).dropdown()
参考 jquery - Semantic UI: Multi Select Dropdown pre-select values - Stack Overflow