ํฐ์คํ ๋ฆฌ ๋ทฐ
๋ค์๊ณผ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ๋ฆฌ์คํธ๊ฐ ์ฃผ์ด์ ธ ์๊ณ input์ ๋ด์ฉ์ ์ ๋ ฅํ ๋ค ์ํฐํค๋ฅผ ๋๋ฅด๊ฒ ๋๋ฉด ๋ฆฌ์คํธ์ ๋งจ ์์ ์๋ก์ด ํค์๋ ์์ดํ ์ด
์ถ๊ฐ๋๋๋ก ๊ตฌํํ๊ณ ์ ํ๋ค.
keyup/keypress Event๋ก ์ด๋ฒคํธ ๊ฐ์ง
์ํฐํค๊ฐ ๋๋ ์ ๊ฒฝ์ฐ input์ value ๊ฐ์ด ๋ฆฌ์คํธ์ ์ถ๊ฐ๋๋๋ก ๋ค์๊ณผ ๊ฐ์ด ์ฝ๋๋ฅผ ๊ตฌํํ์๋ค.
this.inputElement.addEventListener('keypress', e => {
let newItem = this.chipTemplate(e.target.value);
if(e.keyCode === 13) {
// ์๋ก์ด ์์ดํ
๋ฆฌ์คํธ์ ์ถ๊ฐ
}
})
์ฒ์์๋ keyup ์ด๋ฒคํธ ํธ๋ค๋ฌ๋ฅผ ๋ฑ๋กํ์ฌ ์ฃผ์๋๋ฐ value ๊ฐ์ด ํ๊ธ์ผ ๊ฒฝ์ฐ ์ด๋ฒคํธ ๋ฐ์์ด ๋ ๋ฒ ์ค๋ ๋์ด ๋ฐ์ํ๋ ์ค๋ฅ๊ฐ ๋ฐ์ํ์๋ค.
์ด์ ๋์ ์ keypress ์ด๋ฒคํธ ํธ๋ค๋ฌ ๋ฑ๋กํ์ฌ ์ฃผ์๊ณ ์ ์์ ์ผ๋ก ํ๊ธ ๋ํ ๋ฆฌ์คํธ์ ์ถ๊ฐ๋์๋ค.
์ด๋ฒคํธ์ ํค ์ฝ๋๊ฐ 13์ผ ๊ฒฝ์ฐ ์ด๋ฒคํธ๋ฅผ ๋ฐ์ํ๋๋ก ํ๋๋ฐ, ์ฌ๊ธฐ์ 13์ ํค๋ณด๋์์ ์ํฐํค์ ์์คํค ์ฝ๋์ด๋ค.
event.keyCode ๋ ASCII ์ฝ๋์ ๊ธฐ๋ฐํฉ๋๋ค.
insertAdjacentElement๋ก ์์ ์ถ๊ฐ
JS ์์์ ๋์ ์ผ๋ก ์๋กญ๊ฒ ๋ง๋ ์์ดํ ์์๋ฅผ ๋ฆฌ์คํธ ์ปจํ ์ด๋์ ๋งจ ์์ ์ถ๊ฐํด์ฃผ๊ธฐ ์ํด insertAdjacentElement๋ฅผ ์ฌ์ฉํ์๋ค.
insertAdjacentElement์ ์ฒซ ๋ฒ์งธ ์ธ์์๋ ์์๋ฅผ ์ด๋ ์์น์ ๋์ ์ผ๋ก ์ถ๊ฐํด์ค ๊ฒ์ธ์ง ๋ฃ์ด ์ค ์ ์๋ค.
- beforebegin: targetElem ๊ทธ ์์ฒด ์ ์
- afterbegin: targetElem ์ฒซ ๋ฒ์งธ ์์ ์์
- beforeend: ๋ง๋ด targetElem, ๋ง์ง๋ง ์์ ๋ค
- afterend: targetElem ์์ฒด ํ
if(e.keyCode === 13) {
this.container.insertAdjacentElement('afterbegin', newItem);
this.data.unshift(e.target.value);
e.target.value = '';
}
removeData(label) { //๋ฐ์ดํฐ๋ฅผ ์ญ์ ๊ธฐ๋ฅ ๋ชจ๋ํ
let targetIndex = this.data.findIndex(item => item === label);
this.data.splice(targetIndex, 1);
}
์ด๋ ํ๋ฉด ์์์ ๋๋๋ง๋๋ ๋ฆฌ์คํธ(์ปดํฌ๋ํธ)๋ง๊ณ ๋ ๋ฆฌ์คํธ๋์ด ์๋ ์ค์ ๋ฐ์ดํฐ(state)์๋ ์ถ๊ฐ ๋ฐ ์ญ์ ์ ๋ํ ์ ๋ณด๊ฐ ๋ฐ์๋์ด์ผ ํ๊ธฐ ๋๋ฌธ์ ์์ ์์ค ์ฝ๋์ ๊ฐ์ด unshift ์ findIndex ๋ฉ์๋๋ฅผ ์ฌ์ฉํด ์ฃผ์๋ค.
unshift() ๋ฉ์๋๋ ์๋ก์ด ์์๋ฅผ ๋ฐฐ์ด์ ๋งจ ์์ชฝ์ ์ถ๊ฐํ๊ณ , ์๋ก์ด ๊ธธ์ด๋ฅผ ๋ฐํํฉ๋๋ค.
findIndex() ๋ฉ์๋๋ ์ฃผ์ด์ง ํ๋ณ ํจ์๋ฅผ ๋ง์กฑํ๋ ๋ฐฐ์ด์ ์ฒซ ๋ฒ์งธ ์์์ ๋ํ ์ธ๋ฑ์ค๋ฅผ ๋ฐํํฉ๋๋ค.
๋ง์กฑํ๋ ์์๊ฐ ์์ผ๋ฉด -1์ ๋ฐํํฉ๋๋ค.
'JS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
auto-complete_๋น๋๊ธฐ ์ฝ๋ฐฑ ํจ์, focusEvent, mouseEvent (0) | 2021.07.16 |
---|---|
getBoundingClientRect_์์ ์์น ์ก๊ธฐ (0) | 2021.07.14 |
์บ๋ฌ์ (Carousel) (0) | 2021.07.10 |
Image ์ฌ์ด์ฆ ๊ฐ์ ธ์ค๊ธฐ_JS ํ์ฑ๊ณผ ์คํ ๋์ ์์ (0) | 2021.07.10 |
JS ์์์ HTML ๋์ ์์ฑ (0) | 2021.07.07 |