todo-list

form

HTML

<form id="todo-form">
  <input type="text" placeholder="Write a To Do and Press Enter" required />
</form>
<ul id="todo-list"></ul>

JS

const toDoForm = document.getElementById("todo-form");
const toDoList = document.getElementById("todo-list");
const toDoInput = toDoForm.querySelector("input");
// const toDoInput = document.querySelector("#todo-form input"); 와 같다.

handleToDoSubmit

function handleToDoSubmit(event) {
  event.preventDefault();
  const newTodo = toDoInput.value; // value를 미리 저장
  toDoInput.value = ""; // 그리고 toDoInput에서 없앤다.
}

toDoForm.addEventListener("submit", handleToDoSubmit);

ToDo를 만들기 위한 기초 코드 html을 js로 가져왔고 TodoSumit이 작동하는 코드


paintToDo

새로운 todo를 추가할 때 필요한 코드

function paintToDo(newTodo) {
  const li = document.createElement("li");
}

li 안에 span을 넣으면 todo를 삭제하는 buttom까지 만들 수 있게된다

function paintToDo(newTodo) {
  const li = document.createElement("li");
  const span = document.createElement("span");
  li.appendChild(span);
  span.innerText = newTodo;
  toDoList.appendChild(li);
}

html의 element인 li를 js에서 만들고 span도 마찬가지 li 안에 span을 포함하고 span안에 newTodo를 담는다 js에서 toDoList, 즉 html의 “todo-list”에 li를 담는다.

paintToDo 함수 작성후 submit 함수에 삽입

function handleToDoSubmit(event) {
  event.preventDefault();
  const newTodo = toDoInput.value;
  toDoInput.value = "";
  paintToDo(newTodo);
}

문제 1 삭제버튼 없음
문제 2 새로고침하면 없어짐

button

<button>x</button>

x버튼 만드는 방법

클릭 이벤트를 추가해야 한다.


function paintToDo(newTodo) {
  const li = document.createElement("li");
  const span = document.createElement("span");
  span.innerText = newTodo;
  const button = document.createElement("button");
  button.innerText = "X";
  button.addEventListener("click", deleteToDo);
  li.appendChild(span);
  li.appendChild(button);
  toDoList.appendChild(li);
}

클릭 이벤트를 추가한 paintToDo
deleteTodo function을 추가해야한다.

li안에 button을 추가하고 평범한 click event를 추가해도 button의 타겟이 정의 되지 않았기 때문에 제대로 작동하지 않는다 따라서

deleteToDo

target
function deleteToDo(event) {
  console.dir(event.target);
}

코드로 버튼의 타겟을 확인한 뒤 click event function을 작성한다.

console.dir(event.target);에서 parentNote 혹은 parentElement를 확인한다.

따라서

function deleteToDo(event) {
  console.dir(event.target.parentElement.innerText);
}

를 실행한 뒤 toDoInput.value에 a b c를 각각 입력하고 버튼을 클릭하면
aX
bX
cX
각각 다른 결과를 얻고 무엇이 클릭되었는지 확인할 수 있다.

target은 HTML element이고 HTML element은 하나 이상의 property를 가지고 있다. parentElement는 클릭된 element의 부모를 나타낸다. 우리가 작성한 코드에서 button의 부모는 li인것을 확인할 수 있다.


function deleteToDo(event) { const li = event.target.parentElement; li.remove(); }

따라서 해당 button의 부모를 타겟해준 뒤 remove해주면 삭제가 가능하다.

댓글남기기