Learn & Record

Html Css JavaScript (수강신청 프로그램, html, css, 체크리스트 중간, html, css) 본문

Dev/HTML CSS JS

Html Css JavaScript (수강신청 프로그램, html, css, 체크리스트 중간, html, css)

Walker_ 2024. 4. 8. 14:03

1. 수강신청 프로그램

<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <link rel="stylesheet" href="./css/get_form.css">
</head>
<script>
    document.addEventListener("DOMContentLoaded", function () {
        const major = document.getElementById("major")
        const subjects = document.querySelectorAll('input[type=radio]')
        const mailings = document.querySelectorAll('input[type=checkbox]')

        major.addEventListener('change', (event) => {
            // 1. 이벤트 사용
            const majors = event.currentTarget.options // option을 배열로 변환
            const index = event.currentTarget.options.selectedIndex; // 선택한 index 추출
            let selectText = majors[index].textContent

            alert(`${selectText}를 선택했습니다.`)

            // 2. event 사용안됨
            // 사용자가 선택한 항목의 인덱스는 major.selectedIndex를 통해 알아냄
            selectText = major.options[major.selectedIndex].textContent;
        })

        subjects.forEach((subject) => {
            subject.addEventListener('change', (event)=> {
                const current = event.currentTarget;
                if(current.checked) {
                    alert(`${current.parentNode.textContent}를 선택했습니다.`);

                    // 값(value)을 들고 오는 경우
                    // alert(`${current.value}를 선택했습니다.`)
                }
            })
        })

        // 3. checkbox에 change 이벤트가 발생했을 때 실행
        mailings.forEach((mailing) => {
            mailing.addEventListener('change', (event)=> {
                const current = event.currentTarget;
                if(current.checked) {
                    alert(`${current.parentNode.textContent}를 선택했습니다.`)
                }
                else {
                    alert(`${current.parentNode.textContent}를 선택해제 했습니다.`)
                }
            })
        })
    })
</script>
<body>
    <div id="container">
        <h1>수강신청</h1>
        <form name="testForm">
            <fieldset>
                <legend>신청인</legend>
                <ul>
                    <li>
                        <label class="reg" for="userName">이름</label>
                        <input type="text" id="userName" name="userName" maxlength="50">
                    </li>
                    <li>
                        <label class="reg" for="major">학과</label>
                        <select name="major" id="major">
                            <option>---- 학과선택 ----</option>
                            <option value="architect">건축공학과</option>
                            <option value="mechanic">기계공학과</option>
                            <option value="industrial">산업공학과</option>
                            <option value="elect">전기전자공학과</option>
                            <option value="computer">컴퓨터공학과</option>
                            <option value="chemical">화학공학과</option>
                        </select>
                    </li>
                </ul>
            </fieldset>
            <fieldset>
                <legend>신청 과목</legend>
                <p>이 달에 신청할 과목을 선택하세요.</p>
                <label><input type="radio" name="subjcet" value="speaking">회화</label>
                <label><input type="radio" name="subjcet" value="grammer">문법</label>
                <label><input type="radio" name="subjcet" value="writing">작문</label>
            </fieldset>
            <fieldset>
                <legend>메일링</legend>
                <p>메일로 받고 싶은 뉴스 주제를 선택해 주세요</p>
                <label><input type="checkbox" name="mailing1" value="news">해외 단신</label>
                <label><input type="checkbox" name="mailing2" value="dialog">5분 회화</label>
                <label><input type="checkbox" name="mailing3" value="pops">모닝팜스</label>
            </fieldset>
        </form>
    </div>
</body>
</html>

 

#container {
    width: 500px;
    margin: 10px auto;
}

form fieldset {
    margin-bottom: 25px;
}

form legend {
    font-size: 15px;
    font-weight: 600;
}

label.reg {
    font-size: 14px;
    width: 110px;
    color: #390;
    font-weight: bold;
    float: left;
    text-align: right;
    margin-right: 10px;
}

form ul li {
    list-style: none;
    margin: 15px 0;
    font-size: 14px;
}

#selectAll {
    cursor: pointer;
}

 

 

2. 체크리스트_삭제 전까지

<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <link rel="stylesheet" href="./css/check_list.css">
</head>
    <script>
        /*
        3. 등록시 조건
        1) 글 등록이 된 후 폼 태그가 비워지도록
        2) 할일과 날짜가 입력이 안된 경우 글 등록이 안되도록 (경고문을 발생하도록)
        3) 날짜의 기본값은 오늘로
        4) 이전 날짜는 선택이 안되도록
         */
        document.addEventListener('DOMContentLoaded', function () {
            const title = document.querySelector('.add input[name=title]')
            const dueDate = document.querySelector('.add input[name=dueDate]')
            const btnAdd = document.querySelector('.add input[type=button]')
            const list = document.querySelector('.list ul')

            dueDate.value = new Date().toISOString().slice(0,10)
            dueDate.setAttribute('min', new Date().toISOString().slice(0,10))

            btnAdd.addEventListener('click', function () {
                if (title.value === '') {
                    alert('제목을 입력해주세요')
                    title.focus()
                    return
                } else if (dueDate.value === '') {
                    alert('날짜를 선택해 주세요')
                    dueDate.focus()
                    return;
                }

                let addItem = document.createElement('li')
                addItem .innerHTML = `<ul>\n
                        <li>${title.value}</li>\n\
                        <li>${dueDate.value}</li>\n
                        <li><input type="button" name="delete" value="x"></li>\n
                        </ul>`
                list.appendChild(addItem)

                title.value = ''
                dueDate.value = new Date().toISOString().slice(0,10)
            })
        })
    </script>
<body>
    <section class="list">
        <h2>Todo</h2>
        <ul>
            <li>
                <ul>
                    <li>할일</li>
                    <li>2023-12-31</li>
                    <li><input type="button" name="delete" value="x"></li>
                </ul>
            </li>
        </ul>
    </section>
    <section class="add">
        <h2>Add todo</h2>
        <div class="addTool">
            <input type="text" name="title">
            <input type="date" name="dueDate">
            <input type="button" value="등록">
        </div>
    </section>

</body>
</html>

 

* {
    margin: 0;
    padding: 0;
}

h2 {
    color: #004607;
}

section.list {
    width: 500px;
    margin: 10px auto;
    padding: 15px;
    margin-top: 40px;
    background: #a1f19a;
    border-radius: 10px;
    height: 500px;
    border: #185723 1px dashed;
    box-shadow: 5px 5px 3px #a4a4a4
}
section.add {
    width: 500px;
    margin: 10px auto;
    padding: 15px;
    margin-top: 40px;
    background: #6fe36f;
    border-radius: 10px;
    border: #185723 1px dashed;
    box-shadow: 5px 5px 3px #9d9a9a
}

h2 {
    margin-bottom: 20px;
}

.list ul li ul li {
    display: inline;
    text-align: center;
    margin-left: 30px;
    margin-right: 30px;
    font-weight: bolder;
    font-family: Pretendard;
    font-size: 15px;
    color: #185723;
}

.list ul li ul {
    text-align: center;
    border: #185723 solid 1px;
}

.addTool{
    text-align: center;
}

input[value='x'] {
    background: #ff4848;
    border: solid 1px #808080;
    width: 20px;
    height: 20px;
    color: #000000;
    border-radius: 100px;
    font-family: Pretendard;
}

input[value='등록'] {
    background: #00ff77;
    border: solid 1px black;
    width: 70px;
    height: 25px;
    color: #000000;
    border-radius: 5px;
    font-family: Pretendard;
    font-weight: bolder;
}

.list ul{
    background: #ebfde8;
    height: 25px;
    list-style: none;
    margin-top: 10px;
    border-radius: 5px;
}

input[type='text'] {
    background: #ebfde8;
    border: 1px solid black;
    height: 22px;
    border-radius: 8px;
    font-weight: bolder;
    font-family: Pretendard;
    text-align: center;
}

input[type='date'] {
    background: #ebfde8;
    border: 1px solid black;
    height: 22px;
    border-radius: 8px;
    font-weight: bolder;
    font-family: Pretendard;
    text-align: center;
}

 


공부 과정을 정리한 것이라 내용이 부족할 수 있습니다.

부족한 내용은 추가 자료들로 보충해주시면 좋을 것 같습니다.

읽어주셔서 감사합니다 :)