반응형
15일차
<script>
const addItems = document.querySelector('.add-items');
const itemsList = document.querySelector('.plates');
const items = [];
function addItem(e) {
e.preventDefault();
const text = (this.querySelector('[name=item]')).value;
const item = {
text,
done: false
};
items.push(item);
populateList(items, itemsList);
localStorage.setItem('items', JSON.stringify(items));
this.reset();
}
function populateList(plates = [], platesList) {
platesList.innerHTML = plates.map((plate, i) => {
return `
<li>
<input type="checkbox" data-index=${i} id="item${i}" ${plate.done ? 'checked' : ''} />
<label for="item${i}">${plate.text}</label>
</li>
`;
}).join('');
}
function toggleDone(e) {
if (!e.target.matches('input')) return;
const el = e.target;
const index = el.dataset.index;
items[index].done = !items[index].done;
localStorage.setItem('items', JSON.stringify(items));
populateList(items, itemsList);
}
addItems.addEventListener('submit', addItem);
itemsList.addEventListener('click', toggleDone);
populateList(items, itemsList);
</script>
최종 코드
체크 박스가 있는 메모를 추가할 수 있는 프로젝트를 만들었다.
새로고침을 해도 초기화 되지 않고 로컬 저장소에 저장이 되게끔 만들었다.
localStorage.setItem('items', JSON.stringify(items));
로컬 저장소에 저장할 때 문자열 JSON 형식으로 저장해야 한다.
반응형
'챌린지 > JavaScript 30일 챌린지' 카테고리의 다른 글
[JavaScript 30일 챌린지] : 17일차 (0) | 2022.02.13 |
---|---|
[JavaScript 30일 챌린지] : 16일차 (0) | 2022.02.12 |
[JavaScript 30일 챌린지] : 14일차 (0) | 2022.02.10 |
[JavaScript 30일 챌린지] : 13일차 (0) | 2022.02.09 |
[JavaScript 30일 챌린지] : 12일차 (0) | 2022.02.08 |
댓글