BTS Todo List made with VanillaJS
css
=>scss
교체- 모바일 레이아웃 변경
css
=>scss
교체check button
추가 -> 클릭하면 밑줄 그어짐
- 챌린지 끝. 졸업작품 제출 업로드
- only vanilla javascript
- scss, css, html
- 모든 데이터는 자동으로
localStorage
에 저장이 된다.
- 추가, 삭제, todo 체크
- Start : 2022.2.7
- End : 2022.2.21
- Update : 2022.12.18
todo
를 그려주는 열할을 하는paintToDo
함수 안에 삭제 버튼을 추가했던 것처럼 체크 버튼도 추가할 것
//체크 버튼생성
const checkBtn = document.createElement("button");
checkBtn.className = "check-btn";
checkBtn.addEventListener("click", checkToDo);
//li 안에 .check-btn 클래스를 가진 button 출력
li.appendChild(checkBtn);
delete
버튼을 클릭하면li(부모요소)
를 삭제하고localStorage
에도 저장을 하는 방법을 응용하기
checkToDo
함수를 만듦
function checkToDo() {
}
check
버튼을 누르면 해당todo li(부모 요소)
에check
클래스 추가 제거되도록 함.
function checkToDo(event) {
const checkList = event.target.parentElement;
checkList.classList.toggle("check");
}
이렇게 작성하면 클릭할 때마다 li에 check
클래스가 추가 됐다가 삭제 됨.
그러나... localStorage
에 저장을 안하고 그냥 보여질 때마다 체크 버튼을 누를거면 이 상태로도 상관없는데, localStorage
에 저장해서 조건문으로 값을 체크하는 게 좋을 것 같아서 toggle
보다 add
, remove
가 더 적절하다고 생각함.
- todo input 값을 저장하는
newTodoObj(object)
안에check: 0
를 넣어서1
이면check
클래스를추가
하고0
이면check
를삭제
하도록 하기로 함.
function handleToDoSubmit(event) {
.
.
const newTodoObj = {
text: newTodo,
id: Date.now(),
check: 0, // 추가
};
.
.
}
localStorage
에 저장하기 위해 getItem
설정을 해서 TODOS_KEY
안에 있는 객체 중에 클릭한 li의 id
값을 찾아서 해당 값이 1
인지 0
인지 확인할 수 있도록 if문
으로 조건을 나눔.
function checkToDo(event) {
const checkList = event.target.parentElement;
const check = JSON.parse(localStorage.getItem(TODOS_KEY));
const checkId = check.find(({ id }) => id == parseInt(checkList.id));
// check 버튼을 클릭했을 때 check:1(클릭되어 있다면) .check 클래스 삭제하고 check:0으로 변경
if (checkId.check === 1) {
checkList.classList.remove("check");
checkId.check = 0;
} else {
checkList.classList.add("check");
checkId.check = 1;
}
// 위에서 확인한 새로운 값을 저장
toDos = check;
saveToDos();
}
여기까지 끝냈을 때, 버튼을 클릭하고 새로고침 할 때마다 check
가 localStorage
의 todos
안에 정상적으로 등록되는 것을 확인했으나, 분명 check:1
인데 li
에 클래스 명이 들어가 있지 않고, css가 표시가 안 되는 걸 확인함.
무엇이 문제인가 고민했으나, todo 입력 값을 출력해주는 paintToDo
함수 안에 checkToDo
처럼 check:0
을 체크하는 게 없음. 설마해서 함수 안에 조건문으로 실험해봄.
function paintToDo(newTodo) {
.
.
.
if (newTodo.check === 1) {
li.classList.add("check");
}
}
check:1
일 때(체크 버튼을 눌렀을 때) li.classList.add("check");
클래스 명을 추가하도록 했더니, localStorage
에 저장된 대로 실행이 되었음.
- todo 수정
- 달력을 넣어서
day
를 클릭하면 해당day
에 등록할 todo를 저장하고 보여줌 - 작성한 todo 진행도
- 해시태그 넣기
- todo 작성시, 등록한 시간과 날짜가 출력
username
삭제 및 수정