๋ชฉ์ฐจ
bootstrap selectpicker multiple js ์์ : ์ ์ฒด ์ ํ์ด ์ฒดํฌ๋์ด ์๋ ์ํ์์ ๋ค๋ฅธ ์ต์ ์ด ํ๋๋ผ๋ ์ฒดํฌ ํด์ ๋ ๊ฒฝ์ฐ ์ ์ฒด ์ ํ๋ ๊ฐ์ด ์ฒดํฌ ํด์ ๋๊ฒ
Bootstrap์ ์น ๊ฐ๋ฐ์์ ๋ง์ด ์ฌ์ฉ๋๋ ํ๋ก ํธ์๋ ํ๋ ์์ํฌ๋ก, ๋ค์ํ UI ์ปดํฌ๋ํธ์ ์คํ์ผ์ ์ ๊ณตํด ๊ฐ๋ฐ์๋ค์ด ์ฝ๊ณ ๋น ๋ฅด๊ฒ ์น์ฌ์ดํธ๋ฅผ ๊ตฌ์ถํ ์ ์๋๋ก ๋์ต๋๋ค. ๊ทธ์ค์์๋ bootstrap-select
๋ ๊ธฐ๋ณธ HTML <select>
์์๋ฅผ ๋์ฑ ์ธ๋ จ๋๊ฒ ๋ณด์ด๋๋ก ์ปค์คํฐ๋ง์ด์งํ๋ ๋ฐ์ ์ฌ์ฉ๋ฉ๋๋ค. ํนํ selectpicker
๋ ์ฌ์ฉ์๊ฐ ์ฌ๋ฌ ๊ฐ์ ์ต์
์ ์ ํํ ์ ์๋ ๋ฉํฐ ์
๋ ํธ(dropdown) ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค. ๊ทธ๋ฌ๋ ์ด ๋ฉํฐ ์
๋ ํธ ๊ธฐ๋ฅ์ ์ฌ์ฉํ ๋, "์ ์ฒด ์ ํ(Select All)" ์ต์
๊ณผ ๊ด๋ จ๋ ๊ธฐ๋ฅ์ ๊ตฌํํ๋ ๊ณผ์ ์์ ๊ฐ๋ฐ์๋ค์ ์ข
์ข
๋ค์ํ ์๊ตฌ์ฌํญ์ ๋ง๊ฒ ์ปค์คํฐ๋ง์ด์งํด์ผ ํ๋ ์ํฉ์ ์ง๋ฉดํ๊ฒ ๋ฉ๋๋ค.
์ด๋ฒ ๊ธ์์๋ bootstrap-selectpicker
๋ฅผ ์ฌ์ฉํ์ฌ ๋ฉํฐ ์
๋ ํธ ๊ธฐ๋ฅ์ ๊ตฌํํ ๋, "์ ์ฒด ์ ํ" ์ต์
์ด ์ ํ๋ ์ํ์์ ๋ค๋ฅธ ์ต์
์ด ํ๋๋ผ๋ ํด์ ๋ ๊ฒฝ์ฐ, "์ ์ฒด ์ ํ" ์ต์
๋ ํจ๊ป ํด์ ๋๋๋ก ํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์ค๋ช
๋๋ฆฌ๊ฒ ์ต๋๋ค.
๋ฌธ์ ์ค๋ช
๊ธฐ๋ณธ์ ์ผ๋ก bootstrap-select
๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ "์ ์ฒด ์ ํ" ์ต์
์ ๋ชจ๋ ํญ๋ชฉ์ ์ ํํ๊ฑฐ๋ ํด์ ํ๋ ์ฉ๋๋ก ์ฌ์ฉ๋ฉ๋๋ค. ํ์ง๋ง ์ค๋ฌด์์๋ "์ ์ฒด ์ ํ"์ด ์ฒดํฌ๋ ์ํ์์ ๊ฐ๋ณ ํญ๋ชฉ์ ์ ํ ํด์ ํ ๋, "์ ์ฒด ์ ํ"๋ ์๋์ผ๋ก ํด์ ๋๊ธธ ์ํ๋ ๊ฒฝ์ฐ๊ฐ ์ข
์ข
์์ต๋๋ค. ์ด ๊ธฐ๋ฅ์ ๊ตฌํํ๊ธฐ ์ํด์๋ ์ถ๊ฐ์ ์ธ JavaScript ์ฝ๋๋ฅผ ํตํด ๋ก์ง์ ์์ ํด์ผ ํฉ๋๋ค.
์๋ฅผ ๋ค์ด, ์ฌ์ฉ์๊ฐ "์ ์ฒด ์ ํ"์ ํด๋ฆญํ์ฌ ๋ชจ๋ ํญ๋ชฉ์ ์ ํํ๋ค๊ณ ๊ฐ์ ํด ๋ด ์๋ค. ์ดํ ํน์ ํญ๋ชฉ ํ๋๋ฅผ ์ ํ ํด์ ํ๋ฉด, "์ ์ฒด ์ ํ" ๋ํ ์๋์ผ๋ก ํด์ ๋์ด์ผ ํ๋ ๊ฒ์ด ์ด๋ฒ ๊ธ์ ๋ชฉํ์ ๋๋ค.
JavaScript๋ฅผ ์ด์ฉํ ๋ฌธ์ ํด๊ฒฐ
๋จผ์ , ์ด๋ฌํ ๋์์ ๊ตฌํํ๊ธฐ ์ํด์๋ bootstrap-select
์ ๊ธฐ๋ณธ ๊ธฐ๋ฅ์ JavaScript๋ฅผ ํ์ฉํ ์ปค์คํฐ๋ง์ด์ง์ด ํ์ํฉ๋๋ค. JavaScript ์ฝ๋๋ฅผ ์ถ๊ฐํ์ฌ ๊ฐ๋ณ ํญ๋ชฉ์ ์ ํ ์ํ๋ฅผ ๊ฐ์งํ๊ณ , "์ ์ฒด ์ ํ" ํญ๋ชฉ์ ์ฒดํฌ ์ํ๋ฅผ ์ ์ ํ ์
๋ฐ์ดํธํ๋ ๋ฐฉ์์ผ๋ก ๊ตฌํํ ์ ์์ต๋๋ค.


1. HTML ์ฝ๋
์ฐ์ , ๊ธฐ๋ณธ์ ์ธ bootstrap-select
HTML ์ฝ๋๋ฅผ ์ค๋นํด์ผ ํฉ๋๋ค. ์ฌ๊ธฐ์ "์ ์ฒด ์ ํ" ์ต์
์ ์ถ๊ฐํ์ฌ ์ฌ์ฉ์์๊ฒ ๋ชจ๋ ํญ๋ชฉ์ ์ ํํ ์ ์๋ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
<select id="mySelect" class="selectpicker" multiple data-actions-box="true">
<option value="select-all">์ ์ฒด ์ ํ</option>
<option value="option1">์ต์
1</option>
<option value="option2">์ต์
2</option>
<option value="option3">์ต์
3</option>
</select>
์ด HTML ์ฝ๋๋ ๊ฐ๋จํ ๋ฉํฐ ์ ๋ ํธ ๋๋กญ๋ค์ด์ ์ ์ํ๋ฉฐ, "์ ์ฒด ์ ํ" ์ต์ ์ ํฌํจํ๊ณ ์์ต๋๋ค. ์ด์ ์ด ๋๋กญ๋ค์ด์ ๋์์ ์ํ๋ ๋๋ก ์์ ํ๊ธฐ ์ํด JavaScript๋ฅผ ์ถ๊ฐํด์ผ ํฉ๋๋ค.
2. JavaScript ์ฝ๋
๋ค์์ผ๋ก, JavaScript๋ฅผ ์ด์ฉํด "์ ์ฒด ์ ํ" ์ต์ ๊ณผ ๊ฐ๋ณ ํญ๋ชฉ ๊ฐ์ ์ํธ์์ฉ์ ์ ์ดํ๋ ์ฝ๋๋ฅผ ์์ฑํฉ๋๋ค.
$(document).ready(function () {
$('#mySelect').on('changed.bs.select', function (e, clickedIndex, isSelected, previousValue) {
var selectedOptions = $(this).val();
var selectAllValue = 'select-all';
// "์ ์ฒด ์ ํ"์ด ์ฒดํฌ๋ ์ํ์์ ๋ค๋ฅธ ์ต์
์ด ์ ํ ํด์ ๋ ๊ฒฝ์ฐ
if (clickedIndex !== null && selectedOptions !== null && selectedOptions.indexOf(selectAllValue) !== -1) {
if (!isSelected && clickedIndex !== 0) {
// ๊ฐ๋ณ ํญ๋ชฉ์ด ์ ํ ํด์ ๋ ๊ฒฝ์ฐ "์ ์ฒด ์ ํ"์ ์ฒดํฌ ํด์
$(this).find('option[value="' + selectAllValue + '"]').prop('selected', false);
$(this).selectpicker('refresh');
}
}
// "์ ์ฒด ์ ํ"์ด ํด๋ฆญ๋ ๊ฒฝ์ฐ
if (clickedIndex === 0) {
if (isSelected) {
// ๋ชจ๋ ์ต์
์ ํ
$(this).selectpicker('selectAll');
} else {
// ๋ชจ๋ ์ต์
ํด์
$(this).selectpicker('deselectAll');
}
}
});
});
์ ์ฝ๋์์๋ changed.bs.select
์ด๋ฒคํธ๋ฅผ ํ์ฉํด selectpicker
์ ์ ํ ์ํ๊ฐ ๋ณ๊ฒฝ๋ ๋๋ง๋ค ํด๋น ๋ก์ง์ด ์คํ๋๋๋ก ์ค์ ํ์ต๋๋ค. clickedIndex
๋ ์ฌ์ฉ์๊ฐ ํด๋ฆญํ ํญ๋ชฉ์ ์ธ๋ฑ์ค๋ฅผ ๋ํ๋ด๋ฉฐ, isSelected
๋ ํด๋น ํญ๋ชฉ์ด ์ ํ๋์๋์ง ์ฌ๋ถ๋ฅผ ๋ํ๋
๋๋ค.
์ด ๋ก์ง์ ํต์ฌ์ ์ฌ์ฉ์๊ฐ ๊ฐ๋ณ ํญ๋ชฉ์ ํด์ ํ ๋, "์ ์ฒด ์ ํ"์ด ์ ํ๋ ์ํ๋ผ๋ฉด "์ ์ฒด ์ ํ" ๋ํ ์๋์ผ๋ก ํด์ ๋๋๋ก ํ๋ ๋ถ๋ถ์ ๋๋ค. ๋ํ, ์ฌ์ฉ์๊ฐ "์ ์ฒด ์ ํ"์ ํด๋ฆญํ์ ๋๋ ๋ชจ๋ ํญ๋ชฉ์ด ์ ํ๋๊ฑฐ๋ ํด์ ๋๋๋ก ์ฒ๋ฆฌํ๊ณ ์์ต๋๋ค.
๊ฒฐ๋ก
์ด๋ฒ ๊ธ์์๋ bootstrap-selectpicker
๋ฅผ ํ์ฉํด ๋ฉํฐ ์
๋ ํธ ๋๋กญ๋ค์ด์์ "์ ์ฒด ์ ํ" ์ต์
์ ํด๋ฆญํ ํ, ๊ฐ๋ณ ํญ๋ชฉ์ ์ ํ ํด์ ํ ๋ "์ ์ฒด ์ ํ" ๋ํ ์๋์ผ๋ก ํด์ ๋๋๋ก ํ๋ ๋ฐฉ๋ฒ์ ์์๋ณด์์ต๋๋ค. ์ด ๋ฐฉ๋ฒ์ ์ค๋ฌด์์ ๋งค์ฐ ์ ์ฉํ๋ฉฐ, JavaScript๋ฅผ ํ์ฉํด ๋น๊ต์ ๊ฐ๋จํ๊ฒ ๊ตฌํํ ์ ์์ต๋๋ค. ํนํ, ์ฌ์ฉ์ ๊ฒฝํ์ ๊ฐ์ ํ๊ณ ์ ํ๋ ๋ค์ํ ์น ํ๋ก์ ํธ์์ ์ด์ ๊ฐ์ ๊ธฐ๋ฅ์ด ํ์์ ์ผ ์ ์์ต๋๋ค.
์ด์ ์ฌ๋ฌ๋ถ์ ํ๋ก์ ํธ์์๋ ์ด ๊ธฐ๋ฅ์ ์ ์ฉํด๋ณด์ธ์. ์์ ๋ณ๊ฒฝ์ด์ง๋ง ์ฌ์ฉ์์๊ฒ๋ ํฐ ์ฐจ์ด๋ฅผ ๋ง๋ค์ด ์ค ์ ์์ต๋๋ค.
ํค์๋: bootstrap selectpicker, ์ ์ฒด ์ ํ ํด์ , JavaScript, ๋ฉํฐ ์ ๋ ํธ, selectpicker ์์ , bootstrap, ์น ๊ฐ๋ฐ, ๋๋กญ๋ค์ด, ์ฌ์ฉ์ ๊ฒฝํ, ํ๋ก ํธ์๋
๋๊ธ