728x90
๋ฐ์ํ
๐ก ์ค์ต ํฌ์ธํธ!
- ์ด๋ฒ์๋ ์ํ์ ํ ํผ์ ๋ง๋ค์ด๋ณด์๋ค.
- ์ํ ๋ฆฌ์คํธ๋ก๋ ์ ์ธ ์ ๋ฐ์ง๊ฐ ์๊ณ , ๊ฐ๊ฐ ํด๋ฆญํ๋ฉด ์ฌ์ด์ฆ ์ ํ์ฐฝ์ ํด๋นํ๋ ์ฌ์ด์ฆ๋ค์ ๋ฆฌ์คํธ๊ฐ ๋์์ผํ๋ค.
๐ HTML
<form class="container my-5">
<div class="form-group">
<p>์ํ ์ ํ</p>
<select class="form-control" id="option1">
<option>์
์ธ </option>
<option>๋ฐ์ง</option>
</select>
<div class="size-select">
<p class="mt-4">์ฌ์ด์ฆ ์ ํ</p>
<select class="form-control" id="option2">
</select>
</div>
</div>
</form>
- JavaScript ์ฝ๋๋ฅผ ์ง๋ ๊ฒ ๋ชฉ์ ์ด๋ฏ๋ก ๋์์ธ์ ๊ฐ๋จํ๊ฒ Bootstrap ์์ ๋ณต์ฌ-๋ถ์ฌ๋ฃ๊ธฐํ๋ค.
- ๊ธฐ๋ณธ์ ์ผ๋ก ํ๋์ฝ๋ฉ์ ํด์ html ํ์ผ์ ๋ฃ์์์ง๋ง, ์ถํ JavaScript ๋ก ์ฝ๋๋ฅผ ์ง๋ฉด์ ์ฌ์ด์ฆ ์ ํ ๋ถ๋ถ์ ์์ ํด๋ณด์๋ค.
๐ JavaScript
// * input ์ด๋ฒคํธ
// ๊ฐ์ ์์ ํ ๋๋ง๋ค ์ด๋ฒคํธ ๋ฐ์
// * change ์ด๋ฒคํธ
// ์์ ๋ณ๊ฒฝ์ด ๋๋๋ฉด ์ด๋ฒคํธ ๋ฐ์
// ํ
์คํธ ์
๋ ฅ ์์์ ๊ฒฝ์ฐ focus ๋ฅผ ์์ผ๋ฉด ์ด๋ฒคํธ ๋ฐ์
// select, input type=checkbox, input type=radio ์ธ ๊ฒฝ์ฐ ์ ํ ๊ฐ์ด ๋ณ๊ฒฝ๋ ์งํ์ ์ด๋ฒคํธ ๋ฐ์
// * ๋ฐ์ดํฐ
let shirtSize = [80, 85, 90, 95, 100, 105];
let pantsSize = [24, 26, 28, 30, 32, 34, 36];
// * ์ด๊ธฐ ํ๋ฉด
shirtSize.forEach(size => {
let template = `<option>${size}</option>`
$('#option2').append(template);
})
// * ์ฌ์ด์ฆ ์ ํ ๋ฆฌ์คํธ ์ถ๋ ฅ ๊ธฐ๋ฅ
$('#option1').on('change', function(e){
$('#option2').html('');
if($('#option1').val() === "์
์ธ "){
shirtSize.forEach(size => {
let template = `<option>${size}</option>`
$('#option2').append(template);
})
} else if($('#option1').val() === "๋ฐ์ง"){
pantsSize.forEach(size => {
let template = `<option>${size}</option>`
$('#option2').append(template);
})
}
})
- ์ด๋ฒ ์๊ฐ์ ๋ฐฐ์ด ์ด๋ฒคํธ๋ก๋ input ์ด๋ฒคํธ์ change ์ด๋ฒคํธ๊ฐ ์๋ค. ๋์ ๋น์ทํ๋ฉด์๋ ๋ฏธ๋ฌํ๊ฒ ๋ค๋ฅธ๋ฐ
- ๋จผ์ input ์ด๋ฒคํธ์ ๊ฒฝ์ฐ ๊ฐ์ ์์ ํ ๋๋ง๋ค ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๋ค.
- ๋ฐ๋ฉด, change ์ด๋ฒคํธ๋ ํ ์คํธ ์ ๋ ฅ ์์์ธ ๊ฒฝ์ฐ focus ๋ฅผ ์์ ๋, select ํ๊ทธ๋ input ํ๊ทธ ์ค type ์ด checkbox, radio ์ธ ๊ฒฝ์ฐ์ ๊ฐ์ด ๋ณ๊ฒฝ๋ ์งํ์ ๋ฐ์ํ๋ค.
- ๋จผ์ , ์ฌ์ด์ฆ ์ ํ ๋ฆฌ์คํธ์ ๋์ฌ ์ ์ธ ์ฌ์ด์ฆ์ ๋ฐ์ง ์ฌ์ด์ฆ๋ฅผ ๋ฐฐ์ด์ ๋ด์์ค๋ค.
- ๊ทธ๋ฆฌ๊ณ ๋์, id ๊ฐ option1 ์ธ ํ๊ทธ๋ฅผ ํด๋ฆญํ์ ๋ change ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๊ฒ ํ๋๋ฐ, id ๊ฐ option1 ์ธ ํ๊ทธ์ ๋ด์ฉ์ด ์ ์ธ ์ธ ๊ฒฝ์ฐ์ ๋ฐ์ง์ธ ๊ฒฝ์ฐ๋ก ๋๋์ด์ ํด๋นํ๋ ์ฌ์ด์ฆ๋ค์ html ํ์์ผ๋ก ๋ฃ์ด์ค๋ค.
- html ํ์์ผ๋ก ๋ฃ์ด์ค ๋๋ ์๋์ ์ฝ๋๋ค์ด shirtsSize ๋ฐฐ์ด์ด๋ , pantsSize ๋ฐฐ์ด์ด๋ ๋ฐฐ์ด ์์๋ค์ ์ฐจ๋ก์ฐจ๋ก ์ ์ฉ๋๋๋ก forEach ๋ฌธ์ ์ฌ์ฉํ๋ค.
- ์ด ๋, template ๋ณ์๋ฅผ ๋ง๋ค์ด ๋ฐฐ์ด์ ๋ด๊ธด ์์๋๋ก ์ต์ ๊ฐ์ option ํ๊ทธ์ ๋ด์์ค๋ค.
- template ๋ณ์๋ฅผ id ๊ฐ option2 ์ธ ํ๊ทธ์ ๋ถ์ฌ์ค๋ค.
- ์ฌ๊ธฐ๊น์ง๋ง ํ๋ฉด ๊ฐ์ ์ ๋๋ก ๋ค์ด๊ฐ์ง๋ง ์ํ ์ ํ์ ๋ฐ๊ฟ ๋๋ง๋ค ์ ์ ๋์ด๋๋ ์ต์ ๊ฐ์ ๋ณด๊ฒ ๋๋ค.
- ๋ฐ๋ผ์, ๋ค๋ฅธ ์ํ์ ์ ํํ์ ๋๋ ์ํ ๋ชฉ๋ก์ด ์๋ก ์์ฑ๋๊ธฐ ์ ์ ์ต์ ๊ฐ๋ค์ด ๋น์ด์๋ ์ํ๊ฐ ๋ ์ ์๋๋ก $('#option2').html(''); ์ ๋ฃ์ด์ฃผ์๋ค.
- ๊ทธ๋ฆฌ๊ณ ๋ง๋ฌด๋ฆฌ๋ก, html ํ์ผ ๋ด ํ๋์ฝ๋ฉ ๋ด์ฉ์ ์ง์ฐ๊ณ ์ด๊ธฐํ๋ฉด์์ ์ ์ธ ์ ์ฌ์ด์ฆ ์ ํ ๋ฆฌ์คํธ๊ฐ ๋ฐ ์ ์๋๋ก JavaScript ์ฝ๋๋ฅผ ๋ฃ์ด์ฃผ์๋ค.
- ํจ์๋ฅผ ๋ง๋ค์ด์ ์ข ๋ ์์ ํ๋ฉด ํ์ฅ์ฑ์๋ ์ฝ๋๊ฐ ๋ ๊ฒ ๊ฐ์๋ฐ ์ด๊ฑด ์ข ๋ ๊ณต๋ถํด๋ณด๊ณ ์๋ํด๋ด์ผ๊ฒ ๋ค. ์์ง ๊ณต๋ถํด์ผํ ๊ฒ ๋ง์์ ์ง๊ธ ๋น์ฅํ๊ธฐ์..ใ ใ
728x90
๋ฐ์ํ