본문 바로가기

JavaScript

자바스크립트 to do list 만들기

728x90

자바스크립트 to do list 만들기

 

1. 입력란 만들기

 

📌 html로 구현

<body>
    <h1>할 일 목록</h1>
    <input>
    <button>추가 하기</button>
</body>

 

📌 javascript로 구현

    <script>
        document.addEventListener('DOMContentLoaded', ()=> {
            const h1 = document.createElement('h1')
            h1.textContent = '할 일 목록'
            document.body.appendChild(h1)

            const input = document.createElement('input')
            document.body.appendChild(input)

            const addButton = document.createElement('button')
            addButton.textContent = '추가 하기'
            document.body.appendChild(addButton)
        })
    </script>

2. 해야 할 일 리스트 출력

📌 html로 구현

<body>
    <div>
        <input type="checkbox" name="" id="">
        <span></span>
        <button></button>
    </div>
</body>

id 이름 태그를 붙이고 temp_html을 append 해서 구현할 수 있을 것이다.

 

 

📌 javascript로 구현

    <script>
        document.addEventListener('DOMContentLoaded', ()=> {
            addButton.addEventListener('click', () => {
                const div = document.createElement('div')
                document.body.appendChild(div)

                const checkbox = document.createElement('input')
                checkbox.type = 'checkbox'
                div.appendChild(checkbox)

                const span = document.createElement('span')
                span.textContent = input.value
                div.appendChild(span)

                const deleteButton = document.createElement('button')
                deleteButton.textContent = '제거하기'
                div.appendChild(deleteButton)
            })
        })
    </script>

추가하기 버튼을 클릭하면, div 요소가 생기고 div요소 안에 appendChild를 이용해 체크박스, 해야할일, 버튼을 넣어준다.

 

 

만약 input 값이 없다면, 해야할 일 리스트에 추가하지 못하도록 다음과 같이 코드를 수정해준다.

            addButton.addEventListener('click', () => {
                if(input.value !== ''){
                    const div = document.createElement('div')
                    document.body.appendChild(div)

                    const checkbox = document.createElement('input')
                    checkbox.type = 'checkbox'
                    div.appendChild(checkbox)

                    const span = document.createElement('span')
                    span.textContent = input.value
                    input.value = ''
                    div.appendChild(span)

                    const deleteButton = document.createElement('button')
                    deleteButton.textContent = '제거하기'
                    div.appendChild(deleteButton)
                }
                
            })

 


3. to do 리스트 체크하면 선 긋기

 

📌 javascript

                    checkbox.addEventListener('change', () => {
                        if(checkbox.checked){
                            div.style.textDecoration = 'line-through'
                        } else {
                            div.style.textDecoration = ''
                        }
                    })
                    
                    
                    
                    checkbox.addEventListener('change', () => {
                        if(checkbox.checked){
                            span.style.textDecoration = 'line-through'
                        } else {
                            span.style.textDecoration = ''
                        }
                    })

4. 제거하기 버튼 클릭하면 목록에서 삭제하기

 

📌 javascript

                    deleteButton.addEventListener('click',() =>{
                        div.parentNode.removeChild(div)
                    })

추가적인 기능

5. 엔터를 입력해도 추가하기 버튼을 눌렀을 때와 같은 동작하기

            input.addEventListener('keyup', (event) => {
                //엔터를 나타내는 숫자 13
                if(event.keyCode == 13) {
                    const div = document.createElement('div')         
                    document.body.appendChild(div)

                    const checkbox = document.createElement('input')
                    checkbox.type = 'checkbox'
                    checkbox.addEventListener('change', () => {
                        if(checkbox.checked){
                            div.style.textDecoration = 'line-through'
                        } else {
                            div.style.textDecoration = ''
                        }
                    })
                    div.appendChild(checkbox)

                    const span = document.createElement('span')
                    span.textContent = input.value
                    input.value = ''
                    div.appendChild(span)

                    const deleteButton = document.createElement('button')
                    deleteButton.textContent = '제거하기'
                    deleteButton.addEventListener('click',() =>{
                        div.parentNode.removeChild(div)
                    })
                    div.appendChild(deleteButton)
                } 
            })

엔터를 클릭하면 div 생성되도록 작성

 


6. 반복되는 코드 함수로 만들어주기

            // 반복되는 코드 함수로 빼주기
            const addTodo = () => {
                    const div = document.createElement('div')         
                    document.body.appendChild(div)

                    const checkbox = document.createElement('input')
                    checkbox.type = 'checkbox'
                    checkbox.addEventListener('change', () => {
                        if(checkbox.checked){
                            div.style.textDecoration = 'line-through'
                        } else {
                            div.style.textDecoration = ''
                        }
                    })
                    div.appendChild(checkbox)

                    const span = document.createElement('span')
                    span.textContent = input.value
                    input.value = ''
                    div.appendChild(span)

                    const deleteButton = document.createElement('button')
                    deleteButton.textContent = '제거하기'
                    deleteButton.addEventListener('click',() =>{
                        div.parentNode.removeChild(div)
                    })
                    div.appendChild(deleteButton)

            }

 

📌 엔터 클릭

            input.addEventListener('keyup', (event) => {
                //엔터를 나타내는 숫자 13
                if(event.keyCode == 13) {
                    addTodo()
                } 
            })

 

📌 추가하기 버튼 클릭

            addButton.addEventListener('click', () => {
                if(input.value !== ''){
                    addTodo()
                }
                
            })

전체 코드

<!DOCTYPE html>
<html>
<head>
    <title></title>
    <script>
        document.addEventListener('DOMContentLoaded', ()=> {
            // 반복되는 코드 함수로 빼주기
            const addTodo = () => {
                    const div = document.createElement('div')         
                    document.body.appendChild(div)

                    const checkbox = document.createElement('input')
                    checkbox.type = 'checkbox'
                    checkbox.addEventListener('change', () => {
                        if(checkbox.checked){
                            div.style.textDecoration = 'line-through'
                        } else {
                            div.style.textDecoration = ''
                        }
                    })
                    div.appendChild(checkbox)

                    const span = document.createElement('span')
                    span.textContent = input.value
                    input.value = ''
                    div.appendChild(span)

                    const deleteButton = document.createElement('button')
                    deleteButton.textContent = '제거하기'
                    deleteButton.addEventListener('click',() =>{
                        div.parentNode.removeChild(div)
                    })
                    div.appendChild(deleteButton)

            }
            
            const h1 = document.createElement('h1')
            h1.textContent = '할 일 목록'
            document.body.appendChild(h1)

            const input = document.createElement('input')
            input.addEventListener('keyup', (event) => {
                //엔터를 나타내는 숫자 13
                if(event.keyCode == 13) {
                    addTodo()
                } 
            })
            document.body.appendChild(input)

            const addButton = document.createElement('button')
            addButton.textContent = '추가 하기'
            document.body.appendChild(addButton)
            addButton.addEventListener('click', () => {
                if(input.value !== ''){
                    addTodo()
                }
                
            })
        })
    </script>
</head>
<body>
</body>
</html>

참고한 책 : 혼자 공부하는 자바스크립트

참고한 영상 : https://youtu.be/7wD-5T5Xv2M