본문 바로가기

Front-End

[JavaScript] To-do List 만들기 - 1 (박스 만들기, list의 marker로 checkbox 사용)

하고 싶은 일

1. 할 일을 입력 받음

2. 리스트에 올라감

3. 리스트의 테두리에 박스가 있었으면 좋겠음

4. 리스트의 마커가 체크박스였으면 좋겠음

5. 체크박스가 checked 상태일 때 취소선이 생김

6. 목록에 있는 할일을 삭제할 수 있는 기능이 있었으면 좋겠음

7. html 파일과 js 파일이 나눠졌으면 좋겠음(refactoring)

 

 

아래 코드는 1~4번까지 완료된 코드이다

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <title>Todo-List</title>
    <style>
      #wholeList {
        background-color: powderblue;
        padding: 5px;
        border: 2px solid lightgray;
        margin-left: 500px;
        margin-right: 500px;
        margin-top: 5px;
        padding-bottom: 5px;
      }
      #input {
        border-top: 1px solid lightgray;
        padding-top: 5px;
        margin-bottom: 0px;
      }
      #list {
        display: inline-block;
        text-align: left;
        padding: 5px 0px 5px 5px;
        margin-bottom: 5px;

        font-size: 24px;
      }
      body {
        text-align: center;
      }
      ul {
        list-style-type: none;
      }
    </style>
    <script>
      var todolist = [];
      function uploadTodoList() {
        var enrollText = document.getElementById("enrollText");
        var list = document.getElementById("list");

        var txt = enrollText.value;

        todolist.push(txt);
        enrollText.value = null;

        list.innerHTML = "";

        for (var i = 0; i < todolist.length; i++) {
          var todoItem = document.createElement("li");
          var checkbox = document.createElement("input");
          var span = document.createElement("span");

          checkbox.type = "checkbox";
          span.appendChild(document.createTextNode(todolist[i]));
          todoItem.appendChild(checkbox);
          todoItem.appendChild(span);
          list.appendChild(todoItem);

          console.log(list);
        }
      }
    </script>
  </head>
  <body>
    <h1>To-Do List</h1>
    <div id="wholeList">
      <ul id="list"></ul>

      <!-- 할일 입력하기 -->
      <div id="input">
        <input id="enrollText" type="text" />
        <input
          type="button"
          value="등록"
          onclick="
        uploadTodoList();
          alert('등록 완료!');"
        />
      </div>
    </div>
  </body>
</html>

리스트의 marker를 체크박스로 바꾸는 과정에서 어려움을 겪었는데,

이 문제는

 

CSS default로 설정되어 있는 disc 형태의 marker를 삭제하고(list { list-style-type: none; }),

JS checkbox 요소를 추가해주면 된다. (for문의 createElement)

 

이렇게 해결할 수 있었다.