inflearn logo
강의

Khóa học

Chia sẻ kiến thức

Sau khi học ngữ pháp, JavaScript Project 101

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

Đã giải quyết

312

gangsugi

73 câu hỏi đã được viết

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

Câu trả lời 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를 이용하여 배열 형태로 가져와야 합니다.

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

counter01.html은 어디있을까요?

1

8

1

존재하지 않는 일기 url입력 시 alert이 두 번 떠요

0

24

1

useState 직접 구현 부분에서 질문이 있습니다.

1

29

1

학습을 하고 블로그에 정리를 해도 괜찮을까요?

1

31

1

교재(3쇄)와 강의 내용 문의

0

32

2

섹션2번 부분 강의 화면이 잘 못된것 같아서 문의합니다.

0

23

1

call stack 표현이 잘못표현된것이 아닌가요?

0

69

2

React 와 Virtual DOM 의 이야기 영상 실행이 안됩니다.

0

34

1

일반 강의와 차이점?

1

53

1

!= 연산자의 역할

0

35

1

중요하진 않지만 설명하신부분에서 안된부분..

1

37

1

강의 듣는 순서가 어떻게 되나요?

0

51

1

쌤 에러가 계속 나요ㅠㅠ

0

385

2

bmi 계산기 질문있습니다.

0

139

2

재밌게 잘 듣고있어요~

0

301

1

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

0

410

1

trello-app에서 질문 있습니다

0

399

1

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

0

259

1

To Do LIst(응용) 질문

0

348

1

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

0

321

1

MIME type Error / video.paused

0

489

1

인터넷 사용여부

0

301

1

vscode 설정

0

422

1

모달강의 관련 CSS 파일

0

417

1