inflearn logo
강의

Course

Instructor

After studying grammar, JavaScript Project 101

해결되지않는 부분이 있어서 질문드려요

Resolved

345

gangsugi

73 asked

0

삭제버튼도 아이콘폰트로 바꾸고 이것저것 추가해서 해봤습니다.

근데 모든 작동이 다 잘되는데,

만약 5개의 목록이 있고 처음에 각 항목의 삭제버튼을 클릭할시에는 다 잘 되는데요,

근데 1,2개 삭제해보고 나서 새로고침을 누른 후에는 각 항목의 삭제버튼을 클릭하면 화면상에는 제대로 되는데 로컬스토리지는 무조건 다 삭제가 됩니다. delItem 부분에서는 잘못이 있는걸까요?

const form =document.querySelector('form');
const input =document.querySelector('input');
const ul = document.querySelector('ul');
const todoCount = document.querySelector('.todo-count'); 
const clearAll = document.querySelector('.clear-all'); 

let todos = []; 

const save = () => {
  localStorage.setItem('todos', JSON.stringify(todos));
};

const updateTodoCount = () => {
  todoCount.textContent = todos.length;
};

const delItem = (event) => {
  const target = event.target.parentElement;

  todos = todos.filter((todo) => todo.id !== parseInt(target.id));

  save();
  target.remove();
  
  updateTodoCount();  
};

const addItem = (todo) => {  
  if(todo.text !== ''){ 
    const li = document.createElement('li'); 
    const span =document.createElement('span');
    const icon = document.createElement('i');

    icon.classList.add('fa-solid','fa-trash-can');
    span.innerText = todo.text;
    icon.addEventListener('click',delItem);

    ul.appendChild(li);  
    li.appendChild(span);
    li.appendChild(icon); 
    li.id = todo.id; 

    updateTodoCount(); 
  }
};

const handler = (event) => {
  event.preventDefault();
  
  const todo = {
    id: Date.now(),
    text: input.value,
  };

  if((input.value) !== '') {  
    todos.push(todo);
    addItem(todo)  
    save();
    input.value = '';
  }
  
};

const init = () => {
  const userTodos = JSON.parse(localStorage.getItem('todos')); 

  if(userTodos){
    userTodos.forEach((todo) => {
      addItem(todo);
    });
    //todos = userTodos;
    todoCount.textContent = 0;  
  }
};

clearAll.addEventListener('click', () => {
  ul.innerHTML = '';
  todoCount.textContent = 0;
  todos = [];
  localStorage.removeItem('todos');
});

init();
form.addEventListener('submit',handler);

 

javascript

Answer 3

0

erumcoding

다른 글에 답변 드렸습니다.
혹시 같은 문제가 있으신 분들은 해당 글을 참고해주세요!
https://www.inflearn.com/questions/1041836

0

erumcoding

안녕하세요 gangsugi님!

AI가 답변을 달아서 그런지, 제가 실수로 읽음 처리를 한 건지 ㅠㅠ 알림이 누락되어 이제야 확인했습니다. 답변이 늦어 죄송합니다. 혹시 해결 되셨을까요? 아직 해결되지 않으셨다면 html 파일을 포함하여 전체 코드를 올려주시면 확인 후 최대한 빨리 답변 업데이트 하도록 하겠습니다.

(공부하시면서 코드를 약간 수정하신 듯 하여, 정확히 답변을 드리기 위해 전체 코드가 필요합니다. 그리고 '새로고침 후 화면 상에는 제대로 되는데 로컬스토리지는 무조건 삭제가 된다'가 어떤 상황인지 조금만 더 자세히 설명 부탁드립니다!)

0

communityai8509

안녕하세요, 인프런 AI 인턴이에요.

delItem 함수에서는 로컬스토리지의 todos 배열에서 삭제할 대상을 제외하고 다시 저장하는 부분이 있는 것으로 보입니다. 코드를 살펴보면 todos 배열에서 삭제할 대상을 찾을 때 id 값을 비교하고 있는데, target.id 값을 정수로 변환하여 비교하고 있습니다.

여기서 주의할 점은 각 항목의 id 값이 정말로 정수인지 확인해 보아야 합니다. 예를 들어, target.id 값이 문자열이거나 비어있을 경우 비교가 정상적으로 이루어지지 않을 수 있습니다.

또한, 저장된 todos 배열을 로컬스토리지에서 불러올 때에도 JSON.parse를 이용하여 배열 형태로 가져와야 합니다.

이 외에도 미처 확인하지 못한 다른 부분이 있을 수 있으므로, 추가적인 정보가 있다면 함께 알려주세요.

수강자료 다운로드 관련 문의

0

15

2

선택정렬 이해하기 & 구현하기

0

8

1

mission12-01 guide.md파일 누락

0

13

1

자료집 관련

0

21

2

13. (App 2) 기본기 훈련 에서

0

31

1

챌린지 시작일 문의

0

36

0

2. 어떤 도구를 사용하는 것이 가장 유리할까? 강의 중

0

27

1

11차시 Antigravity IDE 설치 후

0

30

1

처음 에이전트 설정을 잘못 했을 경우 수정 하는 방법

0

35

1

5,6,7,8 내용이 없어요

0

32

1

ThemeProvider를 이용해서 NextThemeProvider를 따로 생성하여 Layout.tsx에 적용하는 이유는 뭘까요?

0

30

1

mission 09-01 을 수행할 수 없어요

0

33

1

쌤 에러가 계속 나요ㅠㅠ

0

418

2

bmi 계산기 질문있습니다.

0

160

2

재밌게 잘 듣고있어요~

0

312

1

bmi 계산기 css가 적용이 안됩니다

0

430

1

trello-app에서 질문 있습니다

0

419

1

아 네~다시 질문드립니다.

0

275

1

To Do LIst(응용) 질문

0

362

1

로컬스토리지에만 저장이 되는건?

0

343

1

MIME type Error / video.paused

0

498

1

인터넷 사용여부

0

317

1

vscode 설정

0

435

1

모달강의 관련 CSS 파일

0

437

1