1.  드롭다운 목록 활용하기

🐰  드롭다운 목록은 select 태그로 구현

 드롭 다운 목록을 선택했을 때(값이 변경 되었을 때) 어떤 것을 선택했는지 출력
<head>
    <script>
        document.addEventListener('DOMContentLoaded', function () {
            const select = document.querySelector('select');
            const p = document.querySelector('p');

            select.addEventListener('change', (event) => {
                const options = event.currentTarget.options; // option을 배열로 반환
                const index = event.currentTarget.options.selectedIndex; 
                // 선택한 index 추출
                console.log(options)

                p.textContent = `선택: ${options[index].textContent}`; 
                // 선택한 option 태그를 추출

            })
        });
    </script>
</head>
<body>
    <select>
        <option>떡볶이</option>
        <option>순대</option>
        <option>오뎅</option>
        <option>튀김</option>
    </select>
    <p>선택: 떡볶이</p>
</body>
💡  글자 입력 양식의 change 이벤트
    -  입력 양식은 값이 변경될 때 change 이벤트를 발생.
    -  글자 입력 양식은 입력 양식을 선택(focus 상태)해서 글자를 입력하고, 선택을 해제(blur)할 때 change 이벤트를 발생함
    -  따라서 사용자가 입력하는 중에는 change 이벤트가 발생 x

💡 selectedIndex : 선택한 option의 index 반환

 


 

💡 multiple select 태그 : select 태그에 multiple 속성을 부여하면 ctrl이나 shift를 누르고 복수의 항목을 선택 가능
<head>
    <script>
        document.addEventListener('DOMContentLoaded', function () {
            const select = document.querySelector('select');
            const p = document.querySelector('p');

            select.addEventListener('change', (event) => {
                const options = event.currentTarget.options; // option을 배열로 반환
                // console.log(options)
                const list = []

                for (const option of options) { // options에는 forEach() 메소드가 없어서 for문을 돌림
                    //console.log(option.selected)
                    if (option.selected) { // selected 속성 확인
                        list.push(option.textContent);
                    }
                }
                p.textContent = `선택: ${list.join(',')}`

            })
        });
    </script>
</head>
<body>
    <select multiple>
        <option>떡볶이</option>
        <option>순대</option>
        <option>오뎅</option>
        <option>튀김</option>
    </select>
    <p></p>
</body>

 

 


2.  체크 박스 활용

🐰  체크박스의 체크 상태를 확인할 때는 입력양식의 checked 속성을 사용

체크 상태일때만 타이머를 증가시키는 프로그램
<head>
    <script>
        document.addEventListener('DOMContentLoaded', function () {
            const input = document.querySelector('input');
            const h1 = document.querySelector('h1');
            let count = 0
            let timerId;

            input.addEventListener('change', (event) => {
                console.log(event.currentTarget.checked);
                if (event.currentTarget.checked) { //체크 상태
                    timerId = setInterval(() => {
                        h1.textContent = `${count++}초`
                    }, 1000)
                } else { // 체크 해제 상태
                    clearInterval(timerId)
                }
            });
        });
    </script>
</head>
<body>
    <input type="checkbox">
    <span>타이머 활성화</span>
    <h1></h1>
</body>

 


3.  라디오 버튼 활용

🐰  라디오 버튼은 name 속성이 동일하면 하나만 선택할 수 있음

🐰  체크박스와 마찬가지로 checked 속성 사용

<head>
    <script>
        document.addEventListener('DOMContentLoaded', function () {
            // 문서 객체 추출하기
            const output = document.querySelector('#output');
            const radios = document.querySelectorAll('[name=pet]');

            // 모든 라디오 버튼에
            radios.forEach((radio) => {
                // 이벤트 연결
                radio.addEventListener('change', (event) => {
                    const current = event.currentTarget;
                    if (current.checked) {
                        output.textContent = `좋아하는 애완동물은 ${current.value}이시군요!`;
                    }
                });
            });

        });
    </script>
</head>
<body>
    <h3># 좋아하는 애완동물을 선택해주세요</h3>
    <label><input type="radio" name="pet" value="강아지">
        <span>강아지</span></label>
    <label><input type="radio" name="pet" value="고양이">
        <span>고양이</span></label>
    <label><input type="radio" name="pet" value="햄스터">
        <span>햄스터</span></label>
    <label><input type="radio" name="pet" value="기타">
        <span>기타</span></label>
    <hr>
    <h3 id="output"></h3>
</body>

💡  name 속성이 없는 라디오 버튼
    -  버튼을 여러 개 선택할 수 있다. 한 번 선택하고 나면 취소할 수도 없음

4.  기본 이벤트 막기

🐰  기본 이벤트 : 어떤 이벤트가 발생했을 때 웹 브라우저가 기본적으로 처리해주는 것
🐰  기본 이벤트를 제거할 때는 event 객체의 preventDefault() 메소드를 사용

 

이미지 마우스 오른쪽 버튼 클릭 막기
  웹 브라우저는 이미지에서 마우스 오른쪽 버튼을 클릭하면 컨텍스트 메뉴 contextmenu를 출력
<head>
    <script>
        document.addEventListener('DOMContentLoaded', function () {
            const imgs = document.querySelectorAll('img');

            imgs.forEach((img) => {
                img.addEventListener('contextmenu', (event) => {
                    event.preventDefault(); // 컨텍스트 메뉴를 출력하는 기본 이벤트 제거
                });
            });
        });

    </script>
</head>
<body>
    <img src="http://placebear.com/300/300" alt="">
</body>

메소드 사용 전 / 후


체크 때만 링크 활성화 하기
<head>
    <script>

        document.addEventListener('DOMContentLoaded', function () {
            let status = false;
        
            const checkbox = document.querySelector('input');
            checkbox.addEventListener('change', (event) => {
                status = event.currentTarget.checked;
            });
            
            const link = document.querySelector('a');

            link.addEventListener('click', (event) => {
                if (!status) {
                    event.preventDefault(); // status가 false가 아니면 링크의 기본 이벤트 제거.
                }
            });

        });

    </script>
</head>
<body>
    <input type="checkbox">
    <span>링크 활성화</span>
    <br>
    <a href="http://naver.co.kr">네이버</a>
</body>


5.  참가신청 명단

1) 새 노드 추가하고 표시하기
    -> input 태그에 문자열을 입력하고 [신청] 버튼을 클릭하면, nameList에 문자열이 추가
2) 추가시 맨위로 가도록 변경
<head>
    <link rel="stylesheet" href="./css/name_list.css">
    <script>
        document.addEventListener('DOMContentLoaded', function () {
            const input = document.querySelector('#userName');
            const btn = document.querySelector('button');
            const list = document.querySelector('#nameList');

            btn.addEventListener('click', function (event) {
                // 기본 이벤트(submit) 막기
                // event.preventDefault();

                // 1. input 태그에 있는 문자열을 들고와서 새로운 요소 만들기
                const name = document.createElement('p');
                name.textContent = input.value;
                
                // del 키워드 추가
                const delBtn = document.createElement('span');
                delBtn.textContent = 'X';
                delBtn.setAttribute('class','del');
                // 새로 생성된 요소에 이벤트를 추가할 경우에는 생성될 때 마다 이벤트를 등록해야 함.
                delBtn.addEventListener('click', function () {

                    if (confirm("삭제하시겠습니까?")) {
                        // '현재 노드(this)의 부모 노드(= p태그)의 부모 노드'를 찾아 '현재 노드의 부모 노드' 삭제
                        this.parentNode.parentNode.removeChild(this.parentNode);
                    }
                })
                name.appendChild(delBtn);
                

               // 2. nameList에 새로운 요소 추가하기
               // list.appendChild(name);
                list.insertBefore(name, list.childNodes[0]); // p 요소를 #nameList 맨 앞에 추가하기

                // 3. input 태그에 있는 문자열 제거하기
                input.value = ''; //텍스트 필드 지우기

            });

        });
    </script>
</head>
<body>
    <div id="container">
        <h1>참가 신청</h1>
        <form action="">
            <input type="text" id="userName" placeholder="이름" required>
            <button>신청</button>
        </form>
        <hr>
        <div id="nameList"></div>
    </div>
</body>

 

 

 

 

[ 내용참고 : IT 학원 강의 및 책 '혼자 공부하는 자바스크립트' ]

+ Recent posts