Eggs Sunny Side Up
본문 바로가기
Web/JavaScript

to do 리스트 실습

by guswn100059 2023. 4. 25.

부트스트랩

https://getbootstrap.kr/


 

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <!-- CSS only -->
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-rbsA2VBKQhggwzxH7pPCaAqO46MgnOM80zW1RWuH61DGLwZJEdK2Kadq2F9CUG65" crossorigin="anonymous">
        
    <script src="./js/jquery-3.6.4.min.js"></script>
    
    <style>
        hr {
            width: 500px;
        }

        .todo {
            font-size: 20px;
            width: 200px;
        }

        .form-control {
            width: 400px !important;
        }

        body {
            margin: 20px;
        }

        .task {
            margin-top: 15px;
            margin-bottom: 5px;
        }

        .task-done {
            background-color: gray !important;
        }
    </style>
</head>

<body>
    <div class="main">
        <h1>투두리스트</h1><br>
        <div class="input-area">
            <div class="row g-2">
                <div class="col-auto">
                    <input type="text" class="form-control" id="task-input">
                </div>
                <div class="col-auto">
                    <button type="submit" class="btn btn-primary mb-3" id="add-button">추가</button>
                </div>
            </div>
        </div>
        <hr><br>
</div>


<div id="task-main">
      
</div>



    <script>
        /*
        1. 유저가 할 일 입력
        2. 버튼을 클릭하면 할 일이 추가됨
        3. 추가된 목록을 웹페이지에 출력하기
        4. 완료버튼을 누르면 할일에 완료표시가 보여진다
            체크 했는지 안했는지 확인하는 방법
            -> 할 일을 저장할 때 상태값도 같이 저장 (객체 형태로)
            4-1. 상태값 객체에 true/false 넣어서
            4-2. true면 완료 / false면 미완료
        5. 삭제버튼 누르면 삭제되게
        */

        let taskInput = document.getElementById("task-input");  // 내가 적은 할일
        let addBtn = document.getElementById("add-button");     // 추가 버튼
        let taskList = []; // 유저가 입력한 할일을 저장하는 배열
        let taskMain = document.getElementById('task-main');

        // 할 일을 배열에 추가하는 함수
        let addTask = function(){
            // console.log("입력완료");
            let task = {
                taskContent : taskInput.value,
                isComplete : false
            }

            taskList.push(task);
            console.log(taskList);

            render(); // 웹페이지에 taskList를 출력하는 함수
            taskInput.value = '';
        }
        
        // 할 일 목록을 다시 출력해주는 함수
        let render = function(){
            let resultHTML = "";

            for(let i = 0; i < taskList.length; i++){
                // 체크상태에 따른 task를 출력
                // isComplete : false --> class가 task인 태그
                // isComplete : true --> class가 task task-done인 태그
                if(taskList[i].isComplete){
                    // isComplete = true일때
                    resultHTML += `
                    <div class="task-board">
                        <div class="row g-3 task task-done">
                            <div class="col-auto todo">
                                <span class="todo">${taskList[i].taskContent}</span>
                        </div>
                            <div class="col-auto">
                                <button class="btn btn-success" onclick="toggleCheck('${i}')">완료</button>
                                <button class="btn btn-danger" onclick="deleteTask('${i}')">삭제</button>
                            </div>
                        </div>
                    </div>
                    `;
                }else{
                    // isComplete = false일때
                    resultHTML += `
                    <div class="task-board">
                        <div class="row g-3 task">
                            <div class="col-auto todo">
                                <span class="todo">${taskList[i].taskContent}</span>
                        </div>
                            <div class="col-auto">
                                <button class="btn btn-success" onclick="toggleCheck('${i}')">완료</button>
                                <button class="btn btn-danger" onclick="deleteTask('${i}')">삭제</button>
                            </div>
                        </div>
                    </div>
                    `;
                }
            }
            taskMain.innerHTML = resultHTML;
        }

        addBtn.addEventListener("click", addTask);
        
        // 완료 여부에 따라서 다시 출력해주는 함수
        let toggleCheck = function(idx){
            // 내가 누른 버튼이 몇번째 인덱스인지
            console.log("선택한 버튼 위치", idx);

            // 인덱스를 활용해서 특정한 할일에 대한 완료/미완료상태를 변경
            if(taskList[idx].isComplete){
                taskList[idx].isComplete = false; // true완료, false미완료
            }else{
                taskList[idx].isComplete = true; // true완료, false미완료
            }
            
            console.log(taskList);

            // 체크상태가 바뀐 정보를 웹페이지에 출력(갱신/업데이트)
            render();
        }

        // 삭제 버튼을 누르면 해당 할일이 삭제되는 함수
        // 갱신된 값도 다시 출력을 해줘야 함
        let deleteTask = function(idx){
            // 배열 데이터 삭제: splice()
            // splice(시작 인덱스, 삭제할 갯수)
            taskList.splice(idx, 1);

            render();
        }



    </script>
</body>

</html>

 

 

 

 

'Web > JavaScript' 카테고리의 다른 글

[NodeJS]rtsp 주소(실시간 영상) 웹으로 불러오기  (0) 2023.07.17
카카오맵 API 기초  (0) 2023.04.25
jQuery_Ajax  (0) 2023.04.24
jQuery_동기/비동기  (0) 2023.04.24
키보드이벤트  (0) 2023.04.24

댓글