optgroup๊ณผ ํจ๊ป ์ ํ์ ์ฌ์ฉํ ๋ ๊ทธ๋ฃน ๋ ์ด๋ธ์ ํด๋ฆญํ ๋ ๊ทธ๋ฃน์ ๋ชจ๋ ํญ๋ชฉ์ ์ ํ์ ์ถ๊ฐํ๋ ๊ฒ์ ๋งค์ฐ ํธ๋ฆฌํ ๊ธฐ๋ฅ์
๋๋ค. ํ๋์ ํญ๋ชฉ์ ๋บ ๊ทธ๋ฃน์ ์ ํํ๋ ๊ฒ๋ ๋งค์ฐ ์ฝ์ต๋๋ค.
์๋ฅผ ๋ค์ด, ์์ญ๋ณ๋ก ๊ทธ๋ฃนํ๋ ๊ตญ๊ฐ๊ฐ ์๋ ํํฐ ์์์ด ์์ต๋๋ค. ํ์ฌ๋ก์๋ ํ๋์ ํญ๋ชฉ์ ๋บ ๊ทธ๋ฃน์ ์ ํํ๋ ค๋ฉด ๋ชจ๋ ํญ๋ชฉ์ ํ๋์ฉ ์ ํํด์ผ ํฉ๋๋ค. ์ด ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ฉด ๊ทธ๋ฃน์ ํด๋ฆญํ๊ณ ์ํ์ง ์๋ ๊ตญ๊ฐ๋ฅผ ์ ๊ฑฐํ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค.
์ด๊ฒ์ ์ ์ฉํ์ง๋ง ํ์ค html-select์์๋ ํ์ฉํ์ง ์์ต๋๋ค.
@Fr3nzzy : ๋ค, ํ์ง๋ง ์ ํ์ฌํญ์ด๋ผ๋ฉด ๋ฌธ์ ๊ฐ ๋์ง
@Fr3nzzy : ๋ด๊ฐ ํ ์ ์๋ค๋ฉด ํ์ค html-select๋ ๊ฒ์์ ํ์ฉํ์ง ์์ต๋๋ค ... ๊ทธ๋ฌ๋ ๋งค์ฐ ํธ๋ฆฌํ๊ณ ์ด๊ฒ์ด Chosen์ด ํ๋ฅญํ ์ด์ ์ ๋๋ค. ํ์ค ์ ํ์ ํฅ์์ํต๋๋ค. ์ฌ๊ธฐ์๋ ๊ฐ์ ๋ ผ๋ฆฌ๋ฅผ ์ ์ฉํ ์ ์์ ๊ฒ ๊ฐ์ต๋๋ค.
@greg0ire : +1, ์ด๊ฒ๋ ์ฐพ๊ณ ์์ด์ :o)
@pilap82 ๊ทธ๋ฌ๋ select๋ ์ด๋ฆ์ ์ ๋ ฅํ์ฌ ํญ๋ชฉ ์ฐพ๊ธฐ๋ฅผ ์ง์ํฉ๋๋ค.
๊ทธ๋ด ์ ์์ง :)
ํจ์น๋ฅผ ์ํ ์ต์ ์ ์ฅ์๋ ์๋์ง๋ง ๋์์ด ๋์์ผ๋ฉด ํฉ๋๋ค.
$( '.chzn-results .group-result' ).each( function () {
var self = $( this )
, options = $( '~li', self )
, next = options.filter( '.group-result' ).get( 0 )
;
self.data( 'chzn-options', options.slice( 0, options.index( next ) ) );
} )
.click( function () {
$( this ).data( 'chzn-options' ).mouseup()
} )
.hover( function () {
$( this ).data( 'chzn-options' ).addClass( 'highlighted' );
}, function () {
$( this ).data( 'chzn-options' ).removeClass( 'highlighted' );
} )
.css( { cursor: 'pointer' } );
์ด๊ฒ์ ์ข์ ์๊ฐ์ ๋๋ค. ํต์ฌ ํ์ด ์ด๋ฅผ ๋ณํฉํ ์ ์๋ค๋ฉด ํ ๋ฆฌํ์คํธ๋ฅผ ์ ์ถํ ์ํฅ์ด ์์ต๋๋ค. @pfiller๋ ์ด๋ป๊ฒ ์๊ฐํ์ธ์?
์ ํํ ๋ฐฐ์น ์ ํ ์ํ:
์ ํ์ด์!
์ด๊ฒ์ด Chosen์ ์ถ๊ฐ๋๋ ๊ฒ์ ๋ณด๊ณ ์ถ์ง๋ง ์ด๋ฒคํธ ์์ ์ ๋ ์ง์ค์ ์ธ ๋ฐฉ์์ผ๋ก ์ถ๊ฐ๋์ด์ผ ํฉ๋๋ค. @adriengibrat ์ ์๋ฃจ์ ์ ์๋ฐฑ ๊ฐ์ ๊ทธ๋ฃน์ด ์๋ ๊ฒฝ์ฐ ์ ์ํ๋์ง ์๋ ๊ฐ ๊ทธ๋ฃน์ ๋ฆฌ์ค๋๋ฅผ ์ ์ฉํฉ๋๋ค. ์ต์ ๊ทธ๋ฃน์ ๋ํด ํ ์คํธํ ์ ์๋ ๊ฒ์ ๊ฒฐ๊ณผ div์ ์ด๋ฏธ ํด๋ฆญ ์ด๋ฒคํธ๊ฐ ์์ต๋๋ค. ์ต์ ์ด ์ค์ ๋๋ฉด CSS๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐฐ๊ฒฝ์์ ๋ณ๊ฒฝํด์ผ ํฉ๋๋ค.
+1. ๋๋ optgroup์ด ์ ํ๋๋ฉด (์ ํ์ ์ผ๋ก) ๋ชจ๋ ์์์ ๋นํ์ฑํ/์จ๊ธธ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ์ต๋๋ค.
์ด ๊ธฐ๋ฅ์ ๋ํด +1
@pfiller ์ด ๋๋ search_improvements ๋ถ๊ธฐ์ ๋ํ ์ ๋ฐ์ดํธ๊ฐ ์์ต๋๊น? ๋ง์คํฐ์ ๋ณํฉ๋๋ ๊ฒ์ ๋ณด๊ณ ์ถ์ต๋๋ค.
์ ํ ๊ฐ๋ฅํ ๊ทธ๋ฃน๋ ํ์ํฉ๋๋ค. ์๋ ์ฝ๋๋ฅผ ๋ณ๊ฒฝํ๋ ค๊ณ ์๋ํ ํ "optgroup์ ๊ฑด๋๋ฐ๊ณ ํ์ ํญ๋ชฉ ๋ค์ฌ์ฐ๊ธฐ๋ฅผ ์ํ ๊ณต๋ฐฑ ์ถ๊ฐ"์ ๋ํ ์์ฃผ ์ ์๋ ๋ต๋ณ์์ ์๊ฐ์ ๋ฐ์์ต๋๋ค. ๋์ฐํด ๋ณด์ด์ง๋ง Chosen์ CSS์ ์ํด ๋ฉ์ง๊ฒ ์คํ์ผ์ด ์ง์ ๋์ด ์๊ธฐ ๋๋ฌธ์ optgroup์ด ์๋ ์ ํ์ ์ฌ์ฉํ๊ณ ๊ฐ ์ต์ ์ ํด๋์ค๋ฅผ ์ฌ์ฉํ์ฌ ๊ทธ๋ฃนํ๋ ๋์คํ๋ ์ด์ฒ๋ผ ๋ณด์ด๊ฒ ํ๋ ๊ฒ์ ์ด๋ป์ต๋๊น?
์ด ๋ฐ์ด์ฌ๋ฆฐ์์ ๊ธฐ๋ณธ ๋ฒ์ ์ ๋ณผ ์ ์์ต๋๋ค. http://jsfiddle.net/slothbear/9xqpF/
๋๋ ์คํ์ผ์ ๋ง์ ์๊ฐ์ ํ ์ ํ์ง ์์์ง๋ง ๋น์ ์ ์์ด๋์ด๋ฅผ ์ป์ ๊ฒ์ ๋๋ค. ์ด๊ฒ์ ๋ด๊ฐ ํ์๋ก ํ๋ ๋ ๊ฐ์ง ๊ธฐ๋ฅ์ธ ์ ํ ๊ฐ๋ฅํ optgroup๊ณผ ๊ฒ์ ๊ฐ๋ฅํ optgroup์ ์ ๊ณตํฉ๋๋ค. ๋ชจ๋ optgroup์ด ์์ต๋๋ค.
๋ด ํ๋ก์ ํธ์์ ์ด ๊ธฐ์ ์ ์ฌ์ฉํ์ฌ ์์ผ๋ก ๋์๊ฐ๊ณ ์์ง๋ง ํผ๋๋ฐฑ์ ์ฐพ๊ณ ์์ต๋๋ค. ์๋ํ๋ ๊ฒ์ผ๋ก ๋ณด์ ๋๋ค. ๋ ๋์ ๋ฐฉ๋ฒ์ด ์๊ฐ๋๋์? ๋๋ ๋ฌธ์ ๊ฐ ์์ต๋๊น?
_์๋ง๋ ์ธ๊ธํด์ผ ํ๋ค๋ ๊ฒ์ ๊นจ๋ฌ์์ต๋๋ค. ๋ฐ์ด์ฌ๋ฆฐ์ ์ต์ ์ถ๊ฐ๋ฅผ ํ์ฑํํ๊ธฐ ์ํด Chosen์ Koenpunt ํฌํฌ๋ฅผ ์ฌ์ฉํ๊ณ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๋๋ ๊ทธ๊ฒ์ด ์ด ์์ ์ํฅ์ ๋ฏธ์น์ง ์๋๋ค๊ณ ์๊ฐํฉ๋๋ค._
_์ ๋ ์๋ด๋ฅผ ๊ตฌํ๊ณ ์์ต๋๋ค. ๋๋ ์ด ๊ธฐ์ ์ด select
๊ธฐ๋ฅ์ ๊ทผ์ ํ๊ธฐ ์ํด ์ ํ๋ ์ฒ ํ์ ๊ฝค ๋จผ ๋ถ์ผ๋ผ๋ ๊ฒ์ ์๊ณ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ต์
์ด ์ด ๊ธฐ๋ฅ์ ์ ํฉํ๋ค๋ฉด ๊ธฐ๊บผ์ด ์์
ํ๊ฒ ์ต๋๋ค._
์ด ๊ธฐ๋ฅ์ ๋ํด +1, ์ด ๊ธฐ๋ฅ์ ์ง์ํ๋ ๋ฐฉ๋ฒ์ ์ฐพ๋ค๊ฐ ์ ํํ ๊ฒ์ ์ฐพ์์ต๋๋ค.
(๋๋ ๊ทธ๋ฃน ์ ๋ชฉ์ ์ ํํ๊ฑฐ๋ ๊ทธ๋ฃน ํญ๋ชฉ์ ์ ํํ ์ ์๋ ๋ฐฉ๋ฒ์ ์ฐพ๊ณ ์์์ต๋๋ค) ์์ Slothbear์ ๋ฐ๋ผ
ํธ์ง : ๊ฒฐ๊ตญ ๋๋ ๋ค์์ ์ํํ์ฌ ์ด๊ฒ์ ์๋ฎฌ๋ ์ดํธํ์ต๋๋ค.
ํด๋์ค์ ์ ์ํ์ญ์์ค. ์ปค์๋ฅผ ํฌ์ธํฐ๋ก ์ค์ ํ๋ CSS์ .clickable๋ ์ถ๊ฐํ์ต๋๋ค.
<select name="category" data-placeholder="Choose a category..." class="chosen-select">
<option value="group-1 class="group-result clickable">Group Title</option>
<option value="1" class="group-option">Item Name</option>
<option value="2" class="group-option">Item Name</option>
</select>
์ฌ๊ธฐ ๋ด ์๋ฃจ์ ์ด ์์ต๋๋ค. ๋ด ์๊ตฌ ์ฌํญ์ ๋ฐ๋ผ ๋ค๋ฅด์ง๋ง ์ฝ๊ฒ ์กฐ์ ํ๊ณ ํ์์ ๋ฐ๋ผ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.
์์:
์๋์ฐจ
-์ฐจ1
-์ฐจ2
-์ฐจ3
๋นํ๊ธฐ
-ํ๋ฉด1
-ํ๋ฉด2
๋ด๊ฐ ํ ๊ฒ์ ๋ชจ๋ ๊ทธ๋ฃน์์ ์ฒ์์ ์ ์ต์
์ ๋ง๋๋ ๊ฒ์
๋๋ค. ๊ทธ๋ ๊ฒ ํ๋ฉด '์ ์ฒด' ์ต์
์ด ๊ทธ๋ฃน ๋ฐ๋ก ๋ค์ ํ์๋ฉ๋๋ค.
์๋์ฐจ
- ๋ชจ๋ ์๋์ฐจ
-์ฐจ1
-์ฐจ2
-์ฐจ3
์ฌ๋๋ค
-๋ชจ๋ ์ฌ๋๋ค
-์ฌ๋1
-์ฌ๋2
'results_option_build' ์์ ๋ฐ์ดํฐ๊ฐ ๊ทธ๋ฃน์ผ ๋ 'All' ์ต์ ์ 'result_add_group'์ ๋ ๋ฒ์งธ ๋งค๊ฐ๋ณ์๋ก ์ ๋ฌํ๊ณ ๋ค์ ๋ฐ๋ณต์์ 'All' ์ต์ ์ ๊ฑด๋๋๋๋ค.
if (data.group) {
๋ด์ฉ += this.result_add_group(๋ฐ์ดํฐ, _ref[++_i])
์ด์ 'result_add_group'์ผ๋ก ์ด๋ํ์ฌ ๊ทธ๋ฃน์ ์ฐ๋ฆฌ๊ฐ ์ ๋ฌํ ์ต์
์ผ๋ก ๊ต์ฒดํ๋ ๊ทธ๋ฃน ์คํ์ผ์ ์ ์งํฉ๋๋ค.
result_add_group = ๊ธฐ๋ฅ(๊ทธ๋ฃน, ์ต์
) {
.
.
๋ฐํ "
๊ทธ๊ฒ ๋ค์ผ.. ์ํ๋ ๊ฒฝ์ฐ CSS์์ ์ปค์๋ฅผ ํฌ์ธํฐ๋ก ๋ณ๊ฒฝํ์ญ์์ค.
์ด๋ค ์ค ์ด๋ ๊ฒ๋ ๊ฒ์ ๊ธฐ๋ฅ์ ๊ณ ๋ คํ์ง ์๋ ๊ฒ ๊ฐ์ต๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ์ ํ๋จ์์ ์ต์ ์ ๊ฒ์ํ๋ฉด ๊ทธ๋ฃน ๋ ์ด๋ธ๋ ํ์๋ฉ๋๋ค. ์ด ๋ฐฉ๋ฒ์ ์ฌ๋ฌ ๊ทธ๋ฃน์ด ์๊ณ ๋์ผํ ์ต์ ์ด ์๋ ๊ฒฝ์ฐ ์ด ๋ฐฉ๋ฒ์ ์ฌ์ฉํ์ง ์์ผ๋ฏ๋ก ์๊ฐ์ ์ผ๋ก ๋์ผํ ํญ๋ชฉ ๋ชฉ๋ก์ผ๋ก ๋๋ฉ๋๋ค.
๋ค์ค ์ ํ์ ๊ด๋ฆฌ๋ฅผ ์ฉ์ดํ๊ฒ ํ๋ฏ๋ก ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ต์ ์ผ๋ก ํตํฉํ๋ ๊ฒ์ด ๋งค์ฐ ํฅ๋ฏธ๋ก์ธ ๊ฒ์ ๋๋ค. ์ผ๋ถ ๋ฒ์ ์์ ์์ฐฉ์ ์ธ๊ธ ํ์ต๋๊น? ์ธ์ฌ
์์ ์์ ์ฌํญ์ธ javascript๋ฅผ ์ฌ์ฉํ์ฌ ์ด๊ฒ์ ๊ตฌํํ์ต๋๋ค. ๋ค์ค ์ ํ์๋ ์ฌ์ฉํ์ง ์์ง๋ง ์ฌ์ฉ์ ์ง์ ๊ทธ๋ฃนํ์๋ ์ฌ์ฉํฉ๋๋ค. ๋๋ ๊ทธ๋ฃน์ ์ต์ ์ด์ง๋ง ๊ทธ๋ฃน์ฒ๋ผ ๋ณด์ด๊ฒ ๋ง๋ค๊ณ ํ์ ์ต์ ์ ๊ฒ์ํ ๋ ๊ทธ๋ฃน์ด selected.js http://stackoverflow ์์ ์ ์์ ์ผ๋ก ํ์๋๋ ๊ฒ์ฒ๋ผ '๊ทธ๋ฃน' ํค์๋๋ฅผ ์ง์ ํ์ต๋๋ค
๋ด ํ๋ก์ ํธ์ ์๊ตฌ ์ฌํญ์ด๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ ์ ํํ ๋ก์ปฌ ์ฌ๋ณธ์ ์ถ๊ฐํ์ต๋๋ค. ๊ฒฐ๊ตญ ๊ฝค ์ฌ์ ์ต๋๋ค.
set_default_values
ํจ์์์ ๋์ this.group_selectable = this.options.group_selectable != null ? this.options.group_selectable === true : false;
๋ฅผ ๋ฃ์์ต๋๋ค.
๊ทธ๋ฐ ๋ค์ result_add_group
์์ ๊ทธ๋ฃน์ ํ ๋น๋ ํด๋์ค๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ๋ณ๊ฒฝํ์ต๋๋ค.
if (this.group_selectable) {
group_el.className = "active-result group-result";
} else {
group_el.className = "group-result";
}
group_el.setAttribute("data-group-array-index", group.array_index);
๊ทธ๋ฆฌ๊ณ ๋ง์ง๋ง์ผ๋ก result_select
์ ์ฝ๊ฐ์ ํดํน์ด ์ถ๊ฐ๋์์ต๋๋ค.
if (high[0].getAttribute("data-group-array-index")) {
var that = this;
high.nextUntil('.group-result').each(function(index, element) {
that.result_highlight = $(element);
that.result_select(evt);
});
}
์ง์
item = this.results_data[high[0].getAttribute("data-option-array-index")];
https://gist.github.com/ruhley/9944574 ์์ ์ ์ฒด ์ฝ๋๋ฅผ
https://gist.github.com/ruhley/9944574#file -chosen-jquery-js-L1005
var itm = that.results_data[element.getAttribute("data-option-array-index")];
if(itm && !itm.selected){
that.result_highlight = $(element);
that.result_select(evt);
}
ํํฐ์ ์กฐ๊ธ ๋ฆ์์ง๋ง: ์ด ๊ธฐ๋ฅ์ +1!
์๋ฃจ์
์ ์ํ @ruhley +1์ ๋งค๋ ฅ์ฒ๋ผ ์๋ํฉ๋๋ค!
์ ์ฒด ์ฝ๋ ํ์ด์ง์๋ ์์ง๋ง ์ฝ๋ ์ธ๊ทธ๋จผํธ์๋ ์๋ ์์ ์ธ๋ถ์ฌํญ:
๋ ๋ค๋ฅธ{
๋ง์ง๋ง์ ๋๋ฝ.
์๋
ํ์ธ์,
๊ทํ์ ์ฝ๋์ ๋ํด @ruhley ์๊ฒ ๊ฐ์ฌ๋๋ฆฝ๋๋ค.
๊ทธ๋ฌ๋ ์์ ํ๋ฉด ๊ทธ๋ฃน์ ํด๋ฆญํ ํ ๋นํ์ฑํ๋์ง ์๊ณ ๋ค์ ์ ํํ ์ ์์ต๋๋ค.
๋ด ๊ฐ์ ์ฌํญ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค(์ ํํ 1.4.2 ๊ธฐ์ค).
this.group_selectable = this.options.group_selectable != null ? this.options.group_selectable === true : false;
_๋งค๊ฐ๋ณ์ ์ถ๊ฐ_
content += this.result_add_group(data, _ref.slice(_i+1, _i+data.children+1));
_์์ด๋ค์๊ฒ "result_add_group" ๊ธฐ๋ฅ์ ๋ถ์ฌํ์ธ์._
AbstractChosen.prototype.result_add_group = function(group, childrens) {
_์์ด๋ค์ ๋ฐ๊ธฐ ์ํด_
group_el = document.createElement("li");
) ๋ค์ "result_add_group" ํจ์์์ ๋ค์์ ์ถ๊ฐํฉ๋๋ค.if (this.group_selectable) {
var all = true;
$.each(childrens, function(index, element) {
if(!element.selected){
all = false;
}
});
if(!all) {
classes.push("active-result");
} else {
classes.push("result-selected");
}
}
group_el.setAttribute("data-group-array-index", group.array_index);
_์ต์ํ ํ๋์ ์์์ด ์ ํ๋์ง ์์ ๊ฒฝ์ฐ ๊ทธ๋ฃน์ ํด๋ฆญํ ์ ์๊ฒ ํฉ๋๋ค. (์ด ๋ถ๋ถ์ "all" ๋ณ์๋ก ์ธํด ๊ฐ์ ํ ์ ์์ต๋๋ค)._
high.addClass("result-selected");
) ๋ค์ "result_select" ํจ์์์ ๋ค์์ ์ถ๊ฐํฉ๋๋ค.if (high[0].getAttribute("data-group-array-index")) {
var that = this;
high.nextUntil('.group-result').each(function(index, element) {
if($(element).hasClass('active-result')) {
that.result_highlight = $(element);
that.result_select(evt);
}
});
} else {
_์ ํํ์ง ์์ ํ์ ํญ๋ชฉ๋ง ์ถ๊ฐํฉ๋๋ค._
}
_ํด๋ฆญํ ๊ทธ๋ฃน์ ์กฐ๊ฑด์ ๋ซ์์ผ ํฉ๋๋ค._
ํด๋น ์ฝ๋๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ๋ค์ฌ์ฐ๊ธฐํ๋ ๊ฒ์ ์์ง ๋ง์ญ์์ค ;)
๋ค์์ ๋ด ํ์ผ์ ์ ์ฒด ๋ฒ์ ์
๋๋ค. https://gist.github.com/GuillaumeSTEIN/7a4ece3c6bb487d16df0
๋ค์์ ์ฐจ์ด์ ์
๋๋ค(1๋
๊ฐ๋ฅ): https://www.diffnow.com/?report=8zhe9
์ฆ๊ฑฐ์ด ์๊ฐ ๋ณด๋ด์ธ์
์ด๊ฑฐ ์์ง ๊ตฌํ ์๋๊ฑด๊ฐ์?
@GuillaumeSTEIN ์ ์ ๋ฒ์ ์คํฌ๋ฆฝํธ๋ฅผ ์๋ํ์ง๋ง ์๋ฌด ๊ฒ๋ ๋ณ๊ฒฝ๋์ง ์์ ๊ฒ ๊ฐ์ต๋๋ค.
์๋ํ๋ ค๋ฉด HTML์ ๋ช ๊ฐ์ง ํน์ ๋งค๊ฐ๋ณ์๋ ํด๋์ค๋ฅผ ์ถ๊ฐํด์ผ ํฉ๋๊น?
http://codepen.io/ ๋๋ jsfiddle์์ ์์
์์ ๋ฅผ ๋ง๋ค ์ ์์ต๋๊น?
์, ์ด ๊ธฐ๋ฅ์ ํ์ฑํํ๋ ค๋ฉด group_selectable ์ต์ ์ true๋ก ์ค์ ํด์ผ ํฉ๋๋ค.
@GuillaumeSTEIN ๋๋ถ์ ํจ๊ณผ๊ฐ ์์์ง๋ง @adriengibrat ์คํฌ๋ฆฝํธ์์
์ ํ๋ ๊ทธ๋ฃน์๋ "๊ฒฐ๊ณผ ์ ํ" ํด๋์ค๊ฐ ์์ต๋๋ค.
CSS๋ฅผ ํ ์ ์์ต๋๋ค. ๋ค์์ ๋ด๊ฐ ์์ฑํ ๋ด์ฉ์
๋๋ค. ํ์์ ๋ฐ๋ผ ์์ ํด์ผ ํ ์๋ ์์ต๋๋ค.
select.form-control + .chosen-container-multi .chosen-results li.result-selected{
display: list-item;
color: #ccc;
cursor: default;
background-color: white;
}
๋๋ ๊ทธ๊ฒ์ ์ฐ๋ ๋ค # 2678
์ด๋ ๊ฒ ์ ์ฉํ ๊ธฐ๋ฅ์ด ๋๊ฒ ๋ค์! ๊ตฌํ๋์์ผ๋ฉด ์ข๊ฒ ์ต๋๋ค!
์ด ๊ธฐ๋ฅ์ ๋ํด +1์ ๋๋ค.
๋๊ตฐ๊ฐ ์ด๊ฒ์ด ์ ์ฉํ๋ค๊ณ ์๊ฐํ๋ฉด @slothbear jsfiddle์ ์ก๊ณ ๋ค์๊ณผ ๊ฐ์ด ๊ฐ์ ํฉ๋๋ค.
๋ค์ค ์ ํ(๋ฒ์ 1.7.0์ ์ถ๊ฐ๋จ)์์ ๊ฒฐ๊ณผ๋ฅผ ์ ํํ ํ ๊ฒฐ๊ณผ๋ฅผ ์ด๋ฆฐ ์ํ๋ก ์ ์งํ๊ธฐ ์ํด ๋ฐฉ๊ธ ์ ํํ 1.8.3์ผ๋ก ์ ๊ทธ๋ ์ด๋ํ์ต๋๋ค. ๋ฉ์ง ๊ธฐ๋ฅ์ด ์ถ๊ฐ๋์ด ๊ธฐ์ฉ๋๋ค. ๊ทธ๋ฌ๋ 1.6.1์ ์ฌ์ฉํ๊ณ ์์๊ณ ๊ทธ๋ฃน ์ด๋ฆ์ ํด๋ฆญํ ๋ ์ ์ฒด ๊ทธ๋ฃน์ ์ถ๊ฐํ ์ ์๋๋ก ์ฌ๊ธฐ์์ ์ฝ๋๋ฅผ ์ฌ์ฉํ์ต๋๋ค. http://robido.com/jquery/add-selectdeselect-optgroup-click-events-harvests- selected-jquery-plugin/
๊ทธ ์ฝ๋๋ ์ง๊ธ๊น์ง ํ๋ฅญํ๊ฒ ์๋ํ์ต๋๋ค. 1.8.3 ๋ฐ hide_results_on_ select:false๋ฅผ ์ฌ์ฉ ํ๋ฉด ๋ฌด์ธ๊ฐ๊ฐ ์ค๋จ๋๊ณ ํ์ฌ ๊ฐ์กฐ ํ์๋ ๊ฒฐ๊ณผ ์ต์ ๋ง ์ ํ๋ฉ๋๋ค. ํด๋น ์ค์ด ์ ๊ฑฐ๋๋ฉด(๊ธฐ๋ณธ๊ฐ์ธ true๋ก ๋ค์ ์ค์ ํ๊ณ ์ ํ ์ ์จ๊ธฐ๊ธฐ) ์ ๋๋ก ์๋ํ๊ณ ์ ์ฒด ๊ทธ๋ฃน ๊ฒฐ๊ณผ ์ต์ ์ ์ ํํฉ๋๋ค. ๋ฐ๋ผ์ hide_results_on_ select:false ์ ๋ฌด์ธ๊ฐ๊ฐ .group-result ์๋์ .result-selected๊ฐ ์๋ ๋ชจ๋ ํญ๋ชฉ์ ์์งํ๋ ๊ธฐ๋ฅ์ ์ค๋จ/๋ฐฉํดํฉ๋๋ค. ์๋ก์ด ๊ธฐ๋ฅ์ ์ํด ์ด ๋ฅ๋ ฅ์ ํฌ์ํ๋ ๊ฒ์ ์์ธํฉ๋๋ค.
์์ ๋ชจ๋ ์๊ฒฌ์ ๊ฒํ ํ์ฌ ์ด๊ฒ์ด ์ ๊ธฐ๋ฅ์ ๊ฒฐํจ์ผ๋ก ํด๊ฒฐ๋์๋์ง ํ์ธํ์ง๋ง ์ฌ๋๋ค์ด ์ด๊ฒ์ ํ ์คํธํ ๋ ์ด๋ค ๋ฒ์ ์ ์ฌ์ฉํ๊ณ ์๋์ง ์ ์ ์์ต๋๋ค.
์ด๋ค ์์ด๋์ด?
๊ด์ฐฎ์. ๋๋ ์ถฉ๋ถํ ํ๋ค. 1.8.3์ผ๋ก "์ ๊ทธ๋ ์ด๋"ํ๋ ๊ฒ์ ์ง๋ ์ฃผ ๋์ ๋๋์ง๋ฅผ ๋๋ค๊ฒจ ํจ๋ ๊ฒ์์ ๋ถ๊ณผํ์ต๋๋ค. CSS ๋ฌธ์ , ์๊ธฐ์น ์์ ํ๋ ๋ฌธ์ ๋ฑ ๋ค์ค ์ ํ ๊ธฐ๋ฅ(์ฒ์์๋ ๊ตฌํํ๋ ๋ฐ ๋ช ๋ ์ด ๊ฑธ๋ ธ์)์์ ๊ฒฐ๊ณผ๋ฅผ ๊ณ์ ์ด์ด ๋๋๋ก ์ ๊ทธ๋ ์ด๋ํ์ง๋ง ๊ฒฐ๊ณผ์์ ์ ํํ ๋ ํญ์ ๋งจ ์๋ก ์ ํํ๋ค๋ ๊ฒ์ ๋ฐ๊ฒฌํ์ต๋๋ค. ๊ทธ๊ฒ์ - ์๋ฌด๊ฒ๋ ๊ธฐ๋ค๋ฆฌ์ง ์๋ ๋ชจ๋ ๊ฒ์ ๋๋ค. ๋ง์ ์ต์ ์ด ์๋ ๋จ์ผ ์ ํ์ ์ฑ๋ฅ์ด ์ด๋ป๊ฒ๋ ํฌ๋กค๋ง ์๋๊ฐ ๋๋ ค์ก์ต๋๋ค. ์ฌ๊ธฐ์ ๋์ดํ๊ธฐ์๋ ๋๋ฌด ๋ง์ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ์๋ ๋์ ์ด ์ผ์ ์ ์ ์งํ๊ณ ์์ต๋๋ค. ์ ๋ ๊ทธ๊ฒ์ ์ฆ๊ฒผ์ต๋๋ค. ๊ทธ๋ฌ๋ ๊ฐ์ ์ฌํญ์ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ํ์ํค๋ ๋น์ฉ์ผ๋ก ์ด๋ฃจ์ด์ก์ผ๋ฉฐ ๋๋ ๊ทธ๊ฒ์ ๊ฐ์ง ์ ์์ต๋๋ค. selected๋ฅผ ๋ฝ์๋ด๊ณ select2๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ์ฐ๊ตฌ ์ค์ ๋๋ค. 2018๋ , ์ ์ ๋ ์ถฉ์กฑํ๊ธฐ ์ด๋ ค์์ง๋ ์ฌ์ฉ์ ๊ธฐ๋์ ๋ถ์ํ๋ ์ ํ ๋๊ตฌ๋ฅผ ์ฐพ์์ผ ํ ๋์ ๋๋ค. ์ฃ์กํ๊ณ ๊ฐ์ฌํฉ๋๋ค
๋๋ select2๋ก ์ฎ๊ฒผ์ง๋ง ๊ทธ ์ ์๋ selected์ ๋ํด ๋คํ๋ฅผ ์ฌ์ฉํ์ง ์์์ต๋๋ค. ๋น์ ์ "๊ณ ๋ง์"๋ผ๊ณ ๋งํ๋ ์ด์ํ ๋ฐฉ๋ฒ์ ๊ฐ์ง๊ณ ์์ต๋๋ค.
์๋
ํ์ญ๋๊น,
optgroup์ ์ฌ์ฉํ๊ณ ์ด๋ฅผ ํด๋ฆญํ๊ณ ํด๋น ๊ทธ๋ฃน์ ๋ชจ๋ ์ต์
์ ์๋์ผ๋ก ์ถ๊ฐํ๋ ค๋ฉด ๋ค์์ ์๋ฐ์คํฌ๋ฆฝํธ์ ์ถ๊ฐํ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค. (์ด๋ฒคํธ ํธ๋ฆฌ๊ฑฐ ".group-result"๊ฐ ๋ ์ ํ์ ์ผ ์ ์์)
๋๋ ์ด๊ฒ์ด AbstractChosen.prototype.optgroup_click = function(evt) ....์ ๊ฐ์ด AbstractChosen ํด๋์ค์ ์ถ๊ฐ๋ ์ ์๋ค๊ณ ํ์ ํฉ๋๋ค.
$('body').on('click','.group-result',function(){
// id of select
var quest=$(this).parent().parent().parent().attr('id');
quest='#'+quest.substring(0,quest.lastIndexOf('_'));
// number of optgroup
var total=$(quest+' optgroup').length;
// number of group after group-result clicked
var nb=0;
$(this).nextAll().each(function(){
if($(this).hasClass('group-result'))nb++;
});
// for clicked group-result, select options in the right select tag by position
$(quest+' optgroup:nth-of-type('+(total-nb)+')').children().each(function(){
$(this).prop('selected','selected');
});
// update chosen !
$(quest).trigger('chosen:updated');
});
๋๋ bootstrap-select๋ฅผ ์ฌ์ฉํ๊ณ optgroup์ ํด๋ฆญํ๊ณ ๋ชจ๋ ํญ๋ชฉ์ ์ ํํ ์ ์๋ ๋ฌด์ธ๊ฐ๋ฅผ ์ฐพ๊ธฐ ์ํด ๊ณ ๊ตฐ๋ถํฌํ์ต๋๋ค. - ์ด ๋งํฌ๋ ์ค์ ๋ก ์ ์๊ฒ ํจ๊ณผ์ ์ด์์ต๋๋ค. ๋์์ด ๋๊ธธ ๋ฐ๋๋๋ค. /select-deselect-optgroup-based-on-option-select-in-select-picker-boostrap
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
@Fr3nzzy : ๋ด๊ฐ ํ ์ ์๋ค๋ฉด ํ์ค html-select๋ ๊ฒ์์ ํ์ฉํ์ง ์์ต๋๋ค ... ๊ทธ๋ฌ๋ ๋งค์ฐ ํธ๋ฆฌํ๊ณ ์ด๊ฒ์ด Chosen์ด ํ๋ฅญํ ์ด์ ์ ๋๋ค. ํ์ค ์ ํ์ ํฅ์์ํต๋๋ค. ์ฌ๊ธฐ์๋ ๊ฐ์ ๋ ผ๋ฆฌ๋ฅผ ์ ์ฉํ ์ ์์ ๊ฒ ๊ฐ์ต๋๋ค.
@greg0ire : +1, ์ด๊ฒ๋ ์ฐพ๊ณ ์์ด์ :o)