13_Random Choice Picker
๐ป ์ฃผ์ : ์ ๋ ฅ๋์ ๋จ์ด๋ฅผ ์ ๋ ฅํ๋ฉด ํ๋จ์ ํ๊ทธ๊ฐ ์๊น. ์ฝค๋ง(,)๋ฅผ ํตํด ์ฌ๋ฌ ๊ฐ์ ํ๊ทธ๋ฅผ ๋ง๋ค ์ ์์.
- ๋ฌด์์๋ก ํ์ด๋ผ์ดํธ๋ฅผ ๋ฃ์ ํ๊ทธ๋ฅผ ๊ณ ๋ฆ.
- classList์ add, remove๋ก ํ์ด๋ผ์ดํธ๋ฅผ ์ค๋ค.
const tagsEl = document.getElementById('tags');
const textarea = document.getElementById('textarea');
// ํ
์คํธ ์์ญ : ํ์ด์ง๋ก ๊ฐ๋ฉด ์๋์ผ๋ก ์ปค์๊ฐ ๋์ค๊ณ ์
๋ ฅํ ์ ์์.
textarea.focus();
textarea.addEventListener('keyup', (e) => {
createTags(e.target.value)
if(e.key === 'Enter') {
setTimeout(() => {
e.target.value = ''
}, 10)
randomSelect()
}
})
function createTags(input) {
// ํ๊ทธ๋ฅผ ์ผํ๋ก ๋๋.
// ๋น์นธ์ด ์ถ๊ฐ๋์ง ์๋๋ก trim ํจ์๋ฅผ ์.
const tags = input.split(',').filter(tag => tag.trim() !== '').map(tag => tag.trim())
tagsEl.innerHTML = ''
tags.forEach(tag => {
const tagEl = document.createElement('span')
tagEl.classList.add('tag')
tagEl.innerText = tag
tagsEl.appendChild(tagEl)
})
}
์ฝ๋ฐฑ ํจ์(callback function)๋ ๋ค๋ฅธ ํจ์์๊ฒ ์ ๋ฌ๋์ด ๋์ค์ ํธ์ถ๋๋ ํจ์. ์ฆ, ์ฝ๋ฐฑ ํจ์๋ ๋ค๋ฅธ ํจ์์ ์ธ์๋ก์ ์ ๋ฌ๋์ด ํน์ ์์ ์ด๋ ์กฐ๊ฑด์ ๋๋ฌํ์ ๋ ํธ์ถ๋๋ ํจ์๋ค.
์ฝ๋ฐฑ ํจ์๋ ๋น๋๊ธฐ์ ์ธ ์์ ์์ ๋ง์ด ์ฌ์ฉ๋๋ฉฐ, ํนํ ์ด๋ฒคํธ ์ฒ๋ฆฌ, ํ์ด๋จธ ์ ์ด, AJAX ์์ฒญ ๋ฑ์์ ์์ฃผ ํ์ฉ๋๋ค. ๋น๋๊ธฐ ์์ ์ ์์ ์ด ์๋ฃ๋๊ธฐ ์ ์ ๋ค์ ์์ ์ด ์งํ๋์ด์ผ ํ ๋ ์ ์ฉํ๋ฐ, ์ด๋ ์ฝ๋ฐฑ ํจ์๋ฅผ ํ์ฉํ์ฌ ์์ ์ด ์๋ฃ๋๋ฉด ํธ์ถ๋๋๋ก ํ ์ ์๋ค.
๐๐ป์ฝ๋ฐฑ ํจ์๋ฅผ ์ฌ์ฉํจ์ผ๋ก์จ ๋น๋๊ธฐ์ ์ธ ์์ ์ ํจ์จ์ ์ผ๋ก ์ฒ๋ฆฌํ ์ ์์ผ๋ฉฐ, ์ฝ๋์ ๊ฐ๋ ์ฑ๊ณผ ์ ์ง๋ณด์์ฑ์ ๋์ผ ์ ์๋ค. ๋ํ, ์ฝ๋ฐฑ ํจ์๋ ์ผ๋ฐ์ ์ผ๋ก ์ต๋ช ํจ์(anonymous function)๋ก ์ ๋ฌ๋๊ธฐ๋ ํ๋ฉฐ, ํ์์ ๋ฐ๋ผ ๋งค๊ฐ๋ณ์๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๊ฑฐ๋ ๋ฐํ๊ฐ์ ๋ฐ์ ์๋ ์๋ค.