본문 바로가기

Javascript/오답노트

[TODO-LIST 만들기] text input 시, 화면에 띄우기

최근 JavaScript 강의를 듣고 새롭게 디자인해서 simple todo-list를 만들고 있는데

처음부터 막힐 뻔해서 당황했지만.. 다행스럽게도 생각이 나서 잠깐이나마 막혔던 부분을 적어놓으려 한다.

 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="stylesheet" href="style.css">
    <title>Document</title>
    <script defer src="app.js"></script>
</head>
<body>
    <div id="container">
        <div>
            <form id="todo-form">
                <input type="text" id="todo-input" placeholder="You must write task!">
                <button id="todo-button">ADD</button>
            </form>
        </div>
        
        <div class="todo-ul">

        </div>
    </div>
</body>
</html>

 

JAVASCRIPT

'use strict';

const container = document.getElementById('container');
const todoForm = document.getElementById('todo-form');
const todoInput = document.getElementById('todo-input');
const todoButton = document.getElementById('todo-button');
const todoUL = document.querySelector('.todo-ul');


function handleBtnClick(event) {
    //form 새로고침 막기
    event.preventDefault();

    //입력값 담는 바구니
    const newTodo = todoInput.value;

    //todoInput의 값을 newTodo에 담아놓고
    //화면에 어떻게 띄우지? -> 해결책 : todoForm.addEventListener("submit", handleBtnClick)으로 떴다.

    //create li
    const li = document.createElement('li');
    todoUL.appendChild(li);

    //create span
    const span = document.createElement('span');
    span.innerText=newTodo;
    li.appendChild(span);

    const xBtn = document.createElement('button');
    xBtn.innerText="❌";
    li.appendChild(xBtn);
}

todoForm.addEventListener("submit", handleBtnClick);

 

배운 점 :

글자로 최대한 풀어보려고 노력했다. '단순하게 단순하게..'를 속으로 생각하면서 뭐가 있을까 고민...

아마 이것도 나중에 보면 어딘가에 실수가 보이겠지.. 

 

1. function만 딸랑 나오면 안된다!

한번 더 구체적으로 선언하는 것이 필요하다. addEventListener도 나온다는 것을 잊지말자.

정확하게 JAVASCRIPT에 명령을 내려줘야 한다!!

 

2. span처럼 innerText에 뭔가를 넣을경우 appendChild를 맨 뒤로 옮겨줘야 함을 잊지말자!