์๋ฐ์คํฌ๋ฆฝํธ ์ฒดํฌ๋ฐ์ค ์ฒดํฌ ์ฌ๋ถ ํ์ธ ์๋ฒฝ ๊ฐ์ด๋
ํธ ๋ฆฌ์ค๋, prop(), is() ์ฌ์ฉ๋ฒ์ ์์ ์ ํจ๊ป ์ค๋ช ํฉ๋๋ค.
์น ๊ฐ๋ฐ์์ ์ฌ์ฉ์์์ ์ํธ์์ฉ์ ๋งค์ฐ ์ค์ํฉ๋๋ค. ์ฒดํฌ๋ฐ์ค๋ ์ฌ์ฉ์์ ๋์๋ฅผ ์ป๊ฑฐ๋, ์ฌ๋ฌ ์ต์ ์ค ํ๋ ๋๋ ๋ค์๋ฅผ ์ ํํ๊ฒ ํ๋ ๋ฑ ๊ฐ๋จํ๋ฉด์๋ ํ์์ ์ธ ์ฌ์ฉ์ ์ธํฐํ์ด์ค(UI) ์์์ ๋๋ค. ์๋ฅผ ๋ค์ด โ์ด์ฉ์ฝ๊ด์ ๋์ํฉ๋๋คโ ๋๋ '์๋ ๋ก๊ทธ์ธโ๊ณผ ๊ฐ์ ๊ธฐ๋ฅ๋ค์ ๋ชจ๋ ์ฒดํฌ๋ฐ์ค๋ฅผ ํตํด ๊ตฌํ๋์ฃ .
์ด๋ฌํ ์ฒดํฌ๋ฐ์ค์ ์ ํ ์ฌ๋ถ, ์ฆ '์ํโ๋ฅผ ํ์ธํ๋ ๊ฒ์ ์ฌ์ฉ์์ ์ ๋ ฅ์ ์ฒ๋ฆฌํ๊ณ ๊ทธ์ ๋ง๋ ๋ก์ง์ ์คํํ๊ธฐ ์ํด ๋ฐ๋์ ์์์ผ ํ ๊ธฐ์ ์ ๋๋ค. ์ด ๊ธ์์๋ ์๋ฐ์คํฌ๋ฆฝํธ(JavaScript)์ ์ ์ด์ฟผ๋ฆฌ(jQuery)๋ฅผ ์ฌ์ฉํ์ฌ ์ฒดํฌ๋ฐ์ค์ ์ํ๋ฅผ ํ์ธํ๋ ๋ค์ํ ๋ฐฉ๋ฒ์ ์ฝ๊ณ ๋ช ํํ๊ฒ ์๋ ค๋๋ฆด ๊ฑฐ์์. ์ด ๊ธ์ ๋๊น์ง ์ฝ์ผ์๋ฉด, ์ฌ๋ฌ๋ถ์ ์ด๋ค ์ํฉ์์๋ ์์ ์๊ฒ ์ฒดํฌ๋ฐ์ค ์ํ๋ฅผ ๋ค๋ฃฐ ์ ์๊ฒ ๋ ๊ฒ๋๋ค.
๊ธฐ๋ณธ HTML ์ฒดํฌ๋ฐ์ค
๋จผ์ , ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ HTML ์ฒดํฌ๋ฐ์ค ์ฝ๋๋ถํฐ ์ดํด๋ณด๊ฒ ์ต๋๋ค. ์ฒดํฌ๋ฐ์ค๋ฅผ ๋ง๋ค๋ ค๋ฉด <input> ํ๊ทธ์ type ์์ฑ์ "checkbox"๋ก ์ค์ ํ๋ฉด ๋ฉ๋๋ค.
<label>
<input type="checkbox" id="terms"> ์ด์ฉ์ฝ๊ด์ ๋์ํฉ๋๋ค.
</label>
์ฌ๊ธฐ์ <label> ํ๊ทธ๋ ์ฒดํฌ๋ฐ์ค ์์ ํ
์คํธ๋ฅผ ํด๋ฆญํด๋ ์ฒดํฌ๋ฐ์ค๊ฐ ์ ํ๋๋๋ก ๋ง๋ค์ด ์ฌ์ฉ์ ํธ์์ฑ์ ๋์ฌ์ค๋๋ค. id ์์ฑ์ ๋์ค์ ์๋ฐ์คํฌ๋ฆฝํธ๋ก ์ด ํน์ ์ฒดํฌ๋ฐ์ค์ ์ ๊ทผํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ ๊ณ ์ ํ ์๋ณ์์
๋๋ค.
JavaScript๋ก ์ฒดํฌ๋ฐ์ค ์ํ ํ์ธํ๊ธฐ
์ด์ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํด ์ฒดํฌ๋ฐ์ค์ ์ํ๋ฅผ ํ์ธํ๋ ๋ฐฉ๋ฒ์ ์์๋ด
์๋ค. ๊ฐ์ฅ ํต์ฌ์ ์ธ ์์ฑ์ ๋ฐ๋ก checked์
๋๋ค.
checked ์์ฑ ์ฌ์ฉํ๊ธฐ
checked ์์ฑ์ ์ฒดํฌ๋ฐ์ค์ ํ์ฌ ์ํ๋ฅผ ๋ํ๋ด๋ ๋ถ๋ฆฌ์ธ(Boolean) ๊ฐ์
๋๋ค. ์ฒดํฌ๋ฐ์ค๊ฐ ์ ํ๋์ด ์์ผ๋ฉด true๋ฅผ, ์ ํ๋์ด ์์ง ์์ผ๋ฉด false๋ฅผ ๋ฐํํฉ๋๋ค.
์๋๋ id๊ฐ 'my_checkboxโ์ธ ์ฒดํฌ๋ฐ์ค์ ์ํ๋ฅผ ํ์ธํ๋ ๊ฐ๋จํ ์์ ์
๋๋ค.
<label>
<input type='checkbox' id='my_checkbox' onclick='is_checked()'>
์ฒดํฌํ์ธ์
</label>
<p id='result'></p>
function is_checked() {
// 1. id๋ฅผ ์ฌ์ฉํด ์ฒดํฌ๋ฐ์ค ์์๋ฅผ ์ฐพ์ต๋๋ค.
const checkbox = document.getElementById('my_checkbox');
// 2. checked ์์ฑ์ผ๋ก ์ํ๋ฅผ ํ์ธํฉ๋๋ค.
const isChecked = checkbox.checked; // true ๋๋ false
// 3. ๊ฒฐ๊ณผ๋ฅผ ํ๋ฉด์ ์ถ๋ ฅํฉ๋๋ค.
document.getElementById('result').innerText = `์ฒดํฌ๋ฐ์ค ์ํ: ${isChecked}`;
}
์ด ์ฝ๋์์ onclick ์ด๋ฒคํธ๋ ์ฒดํฌ๋ฐ์ค๋ฅผ ํด๋ฆญํ ๋๋ง๋ค is_checked() ํจ์๋ฅผ ํธ์ถํฉ๋๋ค. ํจ์๋ ์ฒดํฌ๋ฐ์ค์ checked ์์ฑ ๊ฐ์ ๊ฐ์ ธ์ <p> ํ๊ทธ์ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํฉ๋๋ค. ์ ๋ง ๊ฐ๋จํ์ฃ ? :)
์ด๋ฒคํธ ๋ฆฌ์ค๋(Event Listener) ์ฌ์ฉํ๊ธฐ
onclick ์์ฑ์ HTML์ ์ง์ ๋ฃ๋ ๋์ , ์๋ฐ์คํฌ๋ฆฝํธ์์ addEventListener๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ ๊น๋ํ๊ณ ๊ถ์ฅ๋๋ ๋ฐฉ์์
๋๋ค. ํนํ change ์ด๋ฒคํธ๋ฅผ ์ฌ์ฉํ๋ฉด ์ฒดํฌ๋ฐ์ค์ ์ํ๊ฐ ๋ณ๊ฒฝ๋ ๋๋ง๋ค ํน์ ๋์์ ์ํํ๊ฒ ํ ์ ์์ต๋๋ค.
// id๊ฐ 'terms'์ธ ์ฒดํฌ๋ฐ์ค ์์๋ฅผ ๊ฐ์ ธ์ต๋๋ค.
const checkbox = document.getElementById("terms");
// 'change' ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ์ ๋ ์คํ๋ ํจ์๋ฅผ ๋ฑ๋กํฉ๋๋ค.
checkbox.addEventListener("change", function() {
if (this.checked) {
console.log("์ด์ฉ์ฝ๊ด์ ๋์ํ์
จ์ต๋๋ค!");
} else {
console.log("๋์๊ฐ ์ฒ ํ๋์์ต๋๋ค.");
}
});
this.checked๋ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ ์์(์ฌ๊ธฐ์๋ ์ฒดํฌ๋ฐ์ค)์ checked ์ํ๋ฅผ ๊ฐ๋ฆฌํต๋๋ค. ์ด ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ฉด HTML๊ณผ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ฅผ ๋ถ๋ฆฌํ์ฌ ์ฝ๋์ ์ ์ง๋ณด์์ฑ์ ๋์ผ ์ ์์ต๋๋ค.
์ฌ๋ฌ ๊ฐ์ ์ฒดํฌ๋ฐ์ค ์ํ ํ์ธํ๊ธฐ
๋๋ก๋ ์ฌ๋ฌ ๊ฐ์ ์ฒดํฌ๋ฐ์ค ์ค ์ด๋ค ๊ฒ๋ค์ด ์ ํ๋์๋์ง ํ์ธํด์ผ ํ ๋๊ฐ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ์ฌ์ฉ์์ ๊ด์ฌ์ฌ๋ฅผ ์ฌ๋ฌ ๊ฐ ์ ํํ๊ฒ ํ๋ ๊ฒฝ์ฐ์ฃ . ์ด๋๋ document.querySelectorAll()์ ์ฌ์ฉํด ์ฌ๋ฌ ์์๋ฅผ ํ ๋ฒ์ ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค.
<p>๊ด์ฌ์ฌ๋ฅผ ์ ํํ์ธ์:</p>
<label><input type="checkbox" class="interest" value="coding"> ์ฝ๋ฉ</label>
<label><input type="checkbox" class="interest" value="music"> ์์
๊ฐ์</label>
<label><input type="checkbox" class="interest" value="exercise"> ์ด๋</label>
<button onclick="showSelected()">์ ํ ์๋ฃ</button>
function showSelected() {
// class๊ฐ 'interest'์ธ ๋ชจ๋ ์ฒดํฌ๋ฐ์ค๋ฅผ ๊ฐ์ ธ์ต๋๋ค.
const checkboxes = document.querySelectorAll(".interest");
const selectedInterests = [];
// for...of ๋ฃจํ๋ฅผ ์ฌ์ฉํด ๊ฐ ์ฒดํฌ๋ฐ์ค๋ฅผ ์ํํฉ๋๋ค.
for (const checkbox of checkboxes) {
if (checkbox.checked) {
selectedInterests.push(checkbox.value);
}
}
alert(`์ ํ๋ ๊ด์ฌ์ฌ: ${selectedInterests.join(', ')}`);
}
querySelectorAll(".interest")๋ interest ํด๋์ค๋ฅผ ๊ฐ์ง ๋ชจ๋ ์์๋ฅผ NodeList ํํ๋ก ๋ฐํํฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ for...of ๋ฃจํ๋ฅผ ๋๋ฉด์ ๊ฐ ์ฒดํฌ๋ฐ์ค์ checked ์ํ๋ฅผ ํ์ธํ๊ณ , ์ ํ๋ ๊ฒ๋ค์ value๋ง selectedInterests ๋ฐฐ์ด์ ์ถ๊ฐํฉ๋๋ค.
jQuery๋ก ์ฒดํฌ๋ฐ์ค ์ํ ํ์ธํ๊ธฐ
jQuery๋ฅผ ์ฌ์ฉํ๋ฉด DOM ์กฐ์ ์ฝ๋๋ฅผ ๋ ๊ฐ๊ฒฐํ๊ฒ ์์ฑํ ์ ์์ต๋๋ค. ์ฒดํฌ๋ฐ์ค ์ํ ํ์ธ๋ ์์ธ๋ ์๋๋๋ค.
.prop() ๋ฉ์๋ ์ฌ์ฉํ๊ธฐ
jQuery์์๋ ์์์ ์์ฑ(property) ๊ฐ์ ๊ฐ์ ธ์ค๊ฑฐ๋ ์ค์ ํ ๋ .prop() ๋ฉ์๋๋ฅผ ์ฌ์ฉํฉ๋๋ค. checked ๊ฐ์ ๋ถ๋ฆฌ์ธ ์์ฑ์ ๋ค๋ฃฐ ๋ ํนํ ์ ์ฉํฉ๋๋ค.
// id๊ฐ 'checkboxId'์ธ ์ฒดํฌ๋ฐ์ค๊ฐ ์ฒดํฌ๋์ด ์๋์ง ํ์ธ
if ($("#checkboxId").prop("checked")) {
console.log("์ฒดํฌ๋์์ต๋๋ค!");
} else {
console.log("์ฒดํฌ๋์ง ์์์ต๋๋ค.");
}
// ์ฒดํฌ๋ฐ์ค๋ฅผ ๊ฐ์ ๋ก ์ฒดํฌ ์ํ๋ก ๋ง๋ค๊ธฐ
$('#ckBox').prop('checked', true);
// ์ฒดํฌ๋ฐ์ค๋ฅผ ๊ฐ์ ๋ก ์ฒดํฌ ํด์ ํ๊ธฐ
$('#ckBox').prop('checked', false);
.is() ๋ฉ์๋ ์ฌ์ฉํ๊ธฐ
.is() ๋ฉ์๋๋ ์ ํ๋ ์์๊ฐ ํน์ ์กฐ๊ฑด์ ๋ถํฉํ๋์ง ํ์ธํ์ฌ true ๋๋ false๋ฅผ ๋ฐํํฉ๋๋ค. :checked ์ ํ์์ ํจ๊ป ์ฌ์ฉํ๋ฉด ์ฒดํฌ๋ฐ์ค์ ์ํ๋ฅผ ๋งค์ฐ ์ง๊ด์ ์ผ๋ก ํ์ธํ ์ ์์ต๋๋ค.
// id๊ฐ 'ckBox'์ธ ์ฒดํฌ๋ฐ์ค๊ฐ ์ฒดํฌ๋์ด ์๋์ง ํ์ธ
if ($('#ckBox').is(':checked')) {
console.log("์ฒดํฌ๋์ด ์์ต๋๋ค.");
} else {
console.log("์ฒดํฌ๋์ด ์์ง ์์ต๋๋ค.");
}
๊ฐ์ธ์ ์ผ๋ก๋ ๊ฐ๋
์ฑ ์ธก๋ฉด์์ .is(':checked')๋ฅผ ์ ํธํ๋ ํธ์
๋๋ค. ์ฝ๋๊ฐ ๋ง์น ์์ฐ์ด์ฒ๋ผ ์ฝํ๊ธฐ ๋๋ฌธ์ด์ฃ .
์ฌ๋ฌ ๊ฐ์ ์ฒดํฌ๋ฐ์ค ์ํ ํ์ธํ๊ธฐ (jQuery)
jQuery์ .each() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ฉด ์ฌ๋ฌ ๊ฐ์ ์ฒดํฌ๋ฐ์ค๋ฅผ ์ฝ๊ฒ ์ํํ ์ ์์ต๋๋ค.
$(".checkboxClass").each(function() {
if ($(this).is(":checked")) {
console.log($(this).attr('id') + "์(๋) ์ ํ๋์ด์!");
} else {
console.log($(this).attr('id') + "์(๋) ์ ํ ์ ๋์ด์.");
}
});
$(this)๋ .each() ๋ฃจํ ๋ด์์ ํ์ฌ ์ํ ์ค์ธ ์์๋ฅผ ๊ฐ๋ฆฌํต๋๋ค.
์ฃผ์ ์ฌ์ฉ ์ฌ๋ก
์ฒดํฌ๋ฐ์ค ์ํ ํ์ธ์ ๋ค์ํ ์๋๋ฆฌ์ค์์ ํ์ฉ๋ฉ๋๋ค.
- ํผ ์ ํจ์ฑ ๊ฒ์ฌ: ์ฌ์ฉ์๊ฐ โ์ด์ฉ์ฝ๊ด ๋์โ ๊ฐ์ ํ์ ํญ๋ชฉ์ ์ฒดํฌํ๋์ง ํ์ธํ๊ณ , ์ฒดํฌํ์ง ์์๋ค๋ฉด ํผ ์ ์ถ์ ๋ง์ต๋๋ค.
- ๋ฐ์ดํฐ ํํฐ๋ง ๋ฐ ์ ๋ ฌ: ์ผํ๋ชฐ ์ฌ์ดํธ์์ โ๋ฌด๋ฃ ๋ฐฐ์กโ, โํน๊ฐ ์ํโ ๊ฐ์ ํํฐ๋ฅผ ์ฒดํฌ๋ฐ์ค๋ก ์ ๊ณตํ๊ณ , ์ ํ๋ ์กฐ๊ฑด์ ๋ง๋ ์ํ๋ง ๋ณด์ฌ์ค๋๋ค.
- ๊ธฐ๋ฅ ํ์ฑํ/๋นํ์ฑํ: '๋คํฌ ๋ชจ๋ ์ฌ์ฉโ์ด๋ โ์๋ฆผ ๋ฐ๊ธฐโ ๊ฐ์ ์ค์ ์ ์ฒดํฌ๋ฐ์ค๋ก ์ ์ดํฉ๋๋ค.
- โ์ ์ฒด ์ ํโ ๊ธฐ๋ฅ: ํ์ ๋ชจ๋ ํญ๋ชฉ์ ํ ๋ฒ์ ์ ํํ๊ฑฐ๋ ํด์ ํ๋ โ์ ์ฒด ์ ํโ ์ฒดํฌ๋ฐ์ค๋ฅผ ๊ตฌํํ ๋ ์ฌ์ฉ๋ฉ๋๋ค.
์ ๋ฆฌํ๋ฉฐ
์ง๊ธ๊น์ง ์๋ฐ์คํฌ๋ฆฝํธ์ jQuery๋ฅผ ์ฌ์ฉํด ์ฒดํฌ๋ฐ์ค์ ์ํ๋ฅผ ํ์ธํ๋ ๋ฐฉ๋ฒ์ ์์๋ณด์์ต๋๋ค. ํต์ฌ์ checked ์์ฑ์ ์ดํดํ๊ณ , ์ด๋ฅผ if ์กฐ๊ฑด๋ฌธ๊ณผ ํจ๊ป ํ์ฉํ๋ ๊ฒ์
๋๋ค.
- ์์ JavaScript:
element.checked์์ฑ์ ์ฌ์ฉํฉ๋๋ค. - jQuery:
.prop('checked')๋๋.is(':checked')๋ฅผ ์ฌ์ฉํฉ๋๋ค. - ์ฌ๋ฌ ํญ๋ชฉ:
querySelectorAll()์ด๋.each()๋ฅผ ์ฌ์ฉํด ๋ฐ๋ณต ์ฒ๋ฆฌํฉ๋๋ค. - ์ด๋ฒคํธ ์ฒ๋ฆฌ:
change์ด๋ฒคํธ๋ฅผ ์ฌ์ฉํด ์ํ ๋ณ๊ฒฝ์ ๊ฐ์งํฉ๋๋ค.
์ฒดํฌ๋ฐ์ค๋ ์์ง๋ง ๊ฐ๋ ฅํ UI ์์์ ๋๋ค. ์ค๋ ๋ฐฐ์ด ๋ด์ฉ์ ๋ฐํ์ผ๋ก ์ฌ์ฉ์์ ์ํํ๊ฒ ์ํธ์์ฉํ๋ ๋์ ์ธ ์น ํ์ด์ง๋ฅผ ๋ง๋ค์ด๋ณด์ธ์. ์ฌ๋ฌ๋ถ์ ํ๋ก์ ํธ์ ๋ฐ๋ก ์ ์ฉํด๋ณผ ์ ์๋ ์ค์ฉ์ ์ธ ํ์ด ๋์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค!