e.preventDefault()
: html 에서 a 태그나 submit 태그는 고유의 동작이 있음. 페이지를 이동시킨다거나 form 안에 있는 input 등을 전송한다던가 그러한 동작이 있는데 e.preventDefault 는 그 동작을 중단
https://pa-pico.tistory.com/20
session storage VS localstorage
: 로컬 스토리지의 데이터는 사용자가 지우지 않는 이상 계속 브라우저에 남아 있음. 하지만 세션 스토리지의 데이터는 윈도우나 브라우저 탭을 닫을 경우 제거
: localstorage.setItem()은 storage에 저장, localstorage.getItem()은 가져오기
https://www.zerocho.com/category/HTML&DOM/post/5918515b1ed39f00182d3048
formObject.reset()
: <form>
태그 내에 입력된 데이터를 초기화
https://hianna.tistory.com/310
<script>
const addItems = document.querySelector('.add-items');
const itemsList = document.querySelector('.plates');
const items = JSON.parse(localStorage.getItem('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; // skip this unless it's an input
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>