라라리라

2023.09.05 / Step 3 [DOM_이벤트] - 코딩 45 일차 본문

코딩/2023 JavaScript DOM

2023.09.05 / Step 3 [DOM_이벤트] - 코딩 45 일차

헤실 2023. 9. 5. 22:55

_0301_이벤트추가1.html  

 

<!DOCTYPE html>
<html lang="ko">
<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>onclick</title>
</head>
<body>

    <!--
        [개념] 이벤트 핸들러
            이벤트에 반응하려면 이벤트가 발생했을 때 실행되는 함수를 할당해야 하는데,
            이 함수를 핸들러(handler)라고 부른다.
    -->
    <!--
        [개념] 이벤트 추가하기
            (1) HTML 속성 : onclick="함수명()"
            (2) DOM 속성 : elem.onclick = function
            (3) 메서드 : elem.addEventListener(이벤트명, 실행할이벤트함수)
    -->

    <!-- onclick : 마우스를 클릭했을 때 발생하는 이벤트 -->
    <button onclick="clickMe()">버튼</button>

    <script>
        function clickMe() {
            alert("클릭!");
        }
       
    </script>

</body>
</html>

 

onclick

 


_0301_이벤트추가2.html

 

<!DOCTYPE html>
<html lang="ko">
<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>onclick</title>
</head>
<body>

    <!--
        [개념] 이벤트 추가하기
            (1) HTML 속성 : onclick="함수명()"
            (2) DOM 속성 : elem.onclick = function
            (3) 메서드 : elem.addEventListener(이벤트명, 실행할이벤트함수)
    -->

    <button id="btn">버튼</button>

    <script>
        let btn = document.querySelector("#btn");
        btn.onclick = function() {
            alert("클릭!");
        }
    </script>

</body>
</html>

 

onclick

 


_0301_이벤트추가3.html

 

<!DOCTYPE html>
<html lang="ko">
<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>onclick</title>
</head>
<body>
    <!--
        [개념] 이벤트 추가하기
            (1) HTML 속성 : onclick="함수명()"
            (2) DOM 프로퍼티 : elem.onclick = function
            (3) 메서드 : elem.addEventListener(이벤트명, 실행할이벤트함수)

        * HTML속성과 DOM 프로퍼티를 이용한 이벤트 핸들러 방식은
        하나의 이벤트에 여러개의 핸들러(=함수)를 할당할 수 없다는 문제가 있다.
       
        * 반면 addEventListener 메서드는 여러개의 핸들러를 할당할 수 있어
        addEventListener 사용을 권장한다.
    -->

    <button id="btn" onclick="alert('첫번째')">버튼</button>

    <script>
        let btn = document.querySelector("#btn");
        btn.onclick = function() {
            alert("두번째");        // 마지막 것만 실행됨
        }
    </script>

</body>
</html>

 

onclick

 


_0301_이벤트추가4.html

 

<!DOCTYPE html>
<html lang="ko">
<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>addEventListener()</title>
</head>
<body>

    <!--
        [개념] 이벤트 추가하기
            (1) HTML 속성 : onclick="함수명()"
            (2) DOM 프로퍼티 : elem.onclick = function
            (3) 메서드 : elem.addEventListener(이벤트명, 실행할이벤트함수)

        * HTML속성과 DOM 프로퍼티를 이용한 이벤트 핸들러 방식은
        하나의 이벤트에 여러개의 핸들러(=함수)를 할당할 수 없다는 문제가 있다.
       
        * 반면 addEventListener 메서드는 여러개의 핸들러를 할당할 수 있어
        addEventListener 사용을 권장한다.
    -->

    <!-- <button onclick="test()" id="btn">버튼</button> -->
    <button id="btn">버튼</button>

    <script>
        let btn = document.querySelector("#btn");
        // 주의!!! 함수명만 작성할 것! 소괄호 작성하면 오류 발생!
        btn.addEventListener("click", test);
        btn.addEventListener("click", test2);
       
        function test() {
            alert("함수호출!");
        }
        function test2(){
            confirm("retry")
        }
    </script>

</body>
</html>

 

addEventListener()

 


0302_onblur.html

 

<!DOCTYPE html>
<html lang="ko">
<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>onblur</title>
</head>
<body>
   
    <!--
        [개념] 이벤트 종류
            (1) onblur : 내용 변경에 관계없이 HTML 요소가 포커스를 잃으면 이벤트가 발생한다.
            (2) onchange : 내용이 변경 된 후 HTML 요소가 포커스를 잃으면 이벤트가 발생한다.
            (3) onfocus : HTML 요소가 포커스를 받으면 이벤트가 발생한다.
            (4) oninput
                1) <input> 또는 <textarea> 요소의 값이 변경될 때 발생하는 이벤트이다.
                2) onchange와 유사하나 oninput은 내용이 변경된 직후 이벤트가 발생한다.
            (5) onkeyup / onkeydown : 키보드의 키를 놓을/누를 때 이벤트가 발생한다.
            (6) onload
                1) 객체가 로드되었을 때 이벤트가 발생한다.
                2) 웹 페이지가 모든 콘텐츠를 완전히 로드한 후 스크립트를 실행하기 위해
                    <body> 요소 내에서 가장 자주 사용한다.
            (7) onclick : HTML 요소를 클릭했을 때 이벤트가 발생한다.
    -->

    <input type="text" id="msg" placeholder="소문자로 입력하세요." onblur="changeUpper()"> <!--
        요소가 포커스를 잃었을때, changUpper라는 함수를 실행한다.
    -->
    <!-- <input type="text" id="msg" placeholder="소문자로 입력하세요." onchange="changeUpper()"> -->

    <script>
        function changeUpper() { //함수: changeUpper 지정한다.
            let element = document.querySelector("#msg"); //`변수명` 은 msg라는 id의 요소를 받아온다
            element.value = element.value.toUpperCase(); //`변수명`의 요소중 입력값(value)을 대문자로변경
            element.style.backgroundColor = "yellow"; // `변수명`의 스타일: backgrounColor를 yellow로 변경
        }
    </script>
   

</body>
</html>

 

onblur

 


_0303_onchange.html

 

<!DOCTYPE html>
<html lang="ko">
<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>onchange</title>
</head>
<body>

    <!--
        [개념] 이벤트 종류
            (1) onblur : 내용 변경에 관계없이 HTML 요소가 포커스를 잃으면 이벤트가 발생한다.
            (2) onchange : 내용이 변경 된 후 HTML 요소가 포커스를 잃으면 이벤트가 발생한다.
            (3) onfocus : HTML 요소가 포커스를 받으면 이벤트가 발생한다.
            (4) oninput
                1) <input> 또는 <textarea> 요소의 값이 변경될 때 발생하는 이벤트이다.
                2) onchange와 유사하나 oninput은 내용이 변경된 직후 이벤트가 발생한다.
            (5) onkeyup / onkeydown : 키보드의 키를 놓을/누를 때 이벤트가 발생한다.
            (6) onload
                1) 객체가 로드되었을 때 이벤트가 발생한다.
                2) 웹 페이지가 모든 콘텐츠를 완전히 로드한 후 스크립트를 실행하기 위해
                    <body> 요소 내에서 가장 자주 사용한다.
            (7) onclick : HTML 요소를 클릭했을 때 이벤트가 발생한다.
    -->

    <h4>과목을 선택하세요.</h4>
    <select id="mySelect" onchange="selectSub()">
        <option value="html">HTML</option>
        <option value="css">CSS</option>
        <option value="javascript">JavaScript</option>
    </select>

    <p id="selected">선택한 과목 : </p>

    <script>
        function selectSub() {
            let value = document.querySelector("#mySelect").value;

            document.querySelector("#selected").innerText = "선택한 과목 : " + value;
        }
    </script>

</body>
</html>

 

onchange

과목을 선택하세요.

선택한 과목 :

 


_0304_onfocus.html

 

<!DOCTYPE html>
<html lang="ko">
<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>onblur</title>
</head>
<body>

    <!--
        [개념] 이벤트 종류
            (1) onblur : 내용 변경에 관계없이 HTML 요소가 포커스를 잃으면 이벤트가 발생한다.
            (2) onchange : 내용이 변경 된 후 HTML 요소가 포커스를 잃으면 이벤트가 발생한다.
            (3) onfocus : HTML 요소가 포커스를 받으면 이벤트가 발생한다.
            (4) oninput
                1) <input> 또는 <textarea> 요소의 값이 변경될 때 발생하는 이벤트이다.
                2) onchange와 유사하나 oninput은 내용이 변경된 직후 이벤트가 발생한다.
            (5) onkeyup / onkeydown : 키보드의 키를 놓을/누를 때 이벤트가 발생한다.
            (6) onload
                1) 객체가 로드되었을 때 이벤트가 발생한다.
                2) 웹 페이지가 모든 콘텐츠를 완전히 로드한 후 스크립트를 실행하기 위해
                    <body> 요소 내에서 가장 자주 사용한다.
            (7) onclick : HTML 요소를 클릭했을 때 이벤트가 발생한다.
    -->    
   
    <input type="text" id="myInput" onfocus="focusFunction()" onblur="blurFunction()">

    <script>

        let element = document.querySelector("#myInput");
        console.log(element);

        // element.addEventListener("focus", focusFunction);
        // element.addEventListener("blur", blurFunction);

        function focusFunction() {
            element.style.background = "lightgray";
        }
       
        function blurFunction() {
            element.style.background = "";
        }
    </script>

</body>
</html>

 

onblur

 


_0305_oninput1.html

 

<!DOCTYPE html>
<html lang="ko">
<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>oninput</title>
</head>
<body>

    <!--
        [개념] 이벤트 종류
            (1) onblur : 내용 변경에 관계없이 HTML 요소가 포커스를 잃으면 이벤트가 발생한다.
            (2) onchange : 내용이 변경 된 후 HTML 요소가 포커스를 잃으면 이벤트가 발생한다.
            (3) onfocus : HTML 요소가 포커스를 받으면 이벤트가 발생한다.
            (4) oninput
                1) <input> 또는 <textarea> 요소의 값이 변경될 때 발생하는 이벤트이다.
                2) onchange와 유사하나 oninput은 내용이 변경된 직후 이벤트가 발생한다.
            (5) onkeyup / onkeydown : 키보드의 키를 놓을/누를 때 이벤트가 발생한다.
            (6) onload
                1) 객체가 로드되었을 때 이벤트가 발생한다.
                2) 웹 페이지가 모든 콘텐츠를 완전히 로드한 후 스크립트를 실행하기 위해
                    <body> 요소 내에서 가장 자주 사용한다.
            (7) onclick : HTML 요소를 클릭했을 때 이벤트가 발생한다.
    -->      
   
    <input type="text" id="name" placeholder="이름을 입력하세요." oninput="changeText()">
    <p id="result"></p>

    <script>
        function changeText() {
            // alert(document.querySelector("#name").value);
            document.querySelector("#result").innerText = document.querySelector("#name").value;
        }
    </script>

</body>
</html>

 

oninput

 


_0305_oninput2.html

 

<!DOCTYPE html>
<html lang="ko">
<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>oninput</title>
</head>
<body>

    <!--
        [개념] 이벤트 종류
            (1) onblur : 내용 변경에 관계없이 HTML 요소가 포커스를 잃으면 이벤트가 발생한다.
            (2) onchange : 내용이 변경 된 후 HTML 요소가 포커스를 잃으면 이벤트가 발생한다.
            (3) onfocus : HTML 요소가 포커스를 받으면 이벤트가 발생한다.
            (4) oninput
                1) <input> 또는 <textarea> 요소의 값이 변경될 때 발생하는 이벤트이다.
                2) onchange와 유사하나 oninput은 내용이 변경된 직후 이벤트가 발생한다.
            (5) onkeyup / onkeydown : 키보드의 키를 놓을/누를 때 이벤트가 발생한다.
            (6) onload
                1) 객체가 로드되었을 때 이벤트가 발생한다.
                2) 웹 페이지가 모든 콘텐츠를 완전히 로드한 후 스크립트를 실행하기 위해
                    <body> 요소 내에서 가장 자주 사용한다.
            (7) onclick : HTML 요소를 클릭했을 때 이벤트가 발생한다.
    -->          

    <input type="range" id="range" oninput="changeRange()">
    <p id="result"></p>

    <script>
        function changeRange() {
            let value = document.querySelector("#range").value;
            document.querySelector("#result").innerText = value;
        }
    </script>

</body>
</html>

 

oninput

 


 

_0306_onkeydown.html

 

<!DOCTYPE html>
<html lang="ko">
<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>onkeydown</title>
</head>
<body>

    <!--
        [개념] 이벤트 종류
            (1) onblur : 내용 변경에 관계없이 HTML 요소가 포커스를 잃으면 이벤트가 발생한다.
            (2) onchange : 내용이 변경 된 후 HTML 요소가 포커스를 잃으면 이벤트가 발생한다.
            (3) onfocus : HTML 요소가 포커스를 받으면 이벤트가 발생한다.
            (4) oninput
                1) <input> 또는 <textarea> 요소의 값이 변경될 때 발생하는 이벤트이다.
                2) onchange와 유사하나 oninput은 내용이 변경된 직후 이벤트가 발생한다.
            (5) onkeyup / onkeydown : 키보드의 키를 놓을/누를 때 이벤트가 발생한다.
            (6) onload
                1) 객체가 로드되었을 때 이벤트가 발생한다.
                2) 웹 페이지가 모든 콘텐츠를 완전히 로드한 후 스크립트를 실행하기 위해
                    <body> 요소 내에서 가장 자주 사용한다.
            (7) onclick : HTML 요소를 클릭했을 때 이벤트가 발생한다.
    -->      

    <input type="text" id="myInput" onkeydown="keydownFunction()" onkeyup="keyupFunction()">

    <script>
        function keydownFunction() {
            document.querySelector("#myInput").style.backgroundColor = "red";
        }
       
        function keyupFunction() {
            document.querySelector("#myInput").style.backgroundColor = "green";
        }
    </script>

</body>
</html>

 

onkeydown

 


_0306_onkeyup.html

 

<!DOCTYPE html>
<html lang="ko">
<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>onkeyup</title>
</head>
<body>

    <!--
        [개념] 이벤트 종류
            (1) onblur : 내용 변경에 관계없이 HTML 요소가 포커스를 잃으면 이벤트가 발생한다.
            (2) onchange : 내용이 변경 된 후 HTML 요소가 포커스를 잃으면 이벤트가 발생한다.
            (3) onfocus : HTML 요소가 포커스를 받으면 이벤트가 발생한다.
            (4) oninput
                1) <input> 또는 <textarea> 요소의 값이 변경될 때 발생하는 이벤트이다.
                2) onchange와 유사하나 oninput은 내용이 변경된 직후 이벤트가 발생한다.
            (5) onkeyup / onkeydown : 키보드의 키를 놓을/누를 때 이벤트가 발생한다.
            (6) onload
                1) 객체가 로드되었을 때 이벤트가 발생한다.
                2) 웹 페이지가 모든 콘텐츠를 완전히 로드한 후 스크립트를 실행하기 위해
                    <body> 요소 내에서 가장 자주 사용한다.
            (7) onclick : HTML 요소를 클릭했을 때 이벤트가 발생한다.
    -->      
   
    <input type="text" id="myInput" placeholder="영어소문자를 입력하세요.">

    <script>
        document.querySelector("#myInput").addEventListener("keyup", keyupFunction);

        function keyupFunction() {
            let element = document.querySelector("#myInput");
            element.value = element.value.toUpperCase();
        }

    </script>

</body>
</html>

 

onkeyup

 


_0307_onload.html

 

<!DOCTYPE html>
<html lang="ko">
<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>onload</title>
</head>

    <!--
        [개념] 이벤트 종류
            (1) onblur : 내용 변경에 관계없이 HTML 요소가 포커스를 잃으면 이벤트가 발생한다.
            (2) onchange : 내용이 변경 된 후 HTML 요소가 포커스를 잃으면 이벤트가 발생한다.
            (3) onfocus : HTML 요소가 포커스를 받으면 이벤트가 발생한다.
            (4) oninput
                1) <input> 또는 <textarea> 요소의 값이 변경될 때 발생하는 이벤트이다.
                2) onchange와 유사하나 oninput은 내용이 변경된 직후 이벤트가 발생한다.
            (5) onkeyup / onkeydown : 키보드의 키를 놓을/누를 때 이벤트가 발생한다.
            (6) onload
                1) 페이지가 로드되었을 때 이벤트가 발생한다.
                2) 웹 페이지가 모든 콘텐츠를 완전히 로드한 후 스크립트를 실행하기 위해
                    <body> 요소 내에서 가장 자주 사용한다.
            (7) onclick : HTML 요소를 클릭했을 때 이벤트가 발생한다.
    -->      

    <!--
        onload를 통해 페이지가 실행하자마자
        실행시킬 함수를 호출할 수 있다.
    -->

<body onload="myFunction()">
    <script>
        function myFunction() {
            alert("페이지가 로드되었습니다!");
        }
    </script>
</body>
</html>

 

onload

 


_0308_this인자.html

 

<!DOCTYPE html>
<html lang="ko">
<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>oninput</title>
</head>
<body>

    <h3 id="result" onclick="changeRange('red')">클릭하면 글자 색상이 바뀝니다.</h3>
    <h3 id="test" onclick="changeColor(this, 'blue')">클릭하면 글자 색상이 바뀝니다.</h3>

    <script>
        function changeRange(value) {
            document.querySelector("#result").style.color = value;
        }

        // this를 인자로 전달하면, querySelector를 통해 태그를 선택할 필요가 없다.
        function changeColor(element, color) {
            // element = document.querySelector("#test");
            element.style.color = color;
        }
    </script>

</body>
</html>

 

oninput

클릭하면 글자 색상이 바뀝니다.

클릭하면 글자 색상이 바뀝니다.

 


_0309_onclick1.html

 

<!DOCTYPE html>
<html lang="ko">
<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>onclick</title>
</head>
<body>
    아이디: <input type="text" id="id" size="10">
    <button onclick="checkID()">검사</button>

    <script>
        function checkID() {
            let s = document.getElementById("id").value;
            if (s.length < 6) {
                alert("아이디는 6글자 이상이어야 합니다.");
            }
        }
    </script>
</body>
</html>

 

onclick 아이디:

 


_0309_onclick2.html

 

<!DOCTYPE html>
<html lang="ko">
<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>onclick</title>
</head>
<body>
    이름:    <input type="text" id="user">
    <input type="button" onclick="checkNotEmpty()" value="확인">

    <script>
        function checkNotEmpty() {
            let field = document.getElementById('user');
            if (field.value.length == 0) {
                alert("필드가 비어있네요!");
                field.focus();
            }
        }
    </script>
</body>
</html>

 

onclick 이름:

 


_0309_onclick3.html

 

<!DOCTYPE html>
<html lang="ko">
<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>onclick</title>
</head>
<body>
    아이디(6-8 문자): <input type="text" id="id" autofocus>
    <input type="button" onclick="checkLength(6, 8)" value="확인">

    <script>
        function checkLength(min, max) {
            let elem = document.getElementById("id");

            let s = elem.value;
            if (max < s.length || s.length < min) {
                alert(min + " 문자와 " + max + " 문자 사이로 입력해주세요!");
                elem.focus();
            }
        }
    </script>
   
   
</body>
</html>

 

onclick 아이디(6-8 문자):

 


_0309_onclick4.html

 

<!DOCTYPE html>
<html lang="ko">
<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>onclick</title>
</head>
<body>
   
    과일선택
    <select id="fruits">
        <option value="0">선택하세요</option>
        <option value="1">사과</option>
        <option value="2"></option>
        <option value="3">바나나</option>
    </select>
   
    <input type="button" onclick="checkSelection('하나를 선택하여야 합니다.')" value="확인">
   
    <p id="result"></p>

    <script>
        function checkSelection(msg) {
            let elem = document.getElementById("fruits");
            if (elem.value == 0) {
                alert(msg);
                document.querySelector("#result").innerText = msg;
                elem.focus();
            } else {
                document.querySelector("#result").innerText = "선택하신 과일은 " + elem.children[elem.value].innerText + "입니다.";
            }
        }
    </script>

</body>
</html>

 

onclick 과일선택

 


_0309_onclick5.html

 

<!DOCTYPE html>
<html lang="ko">
<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>onclick</title>
</head>
<body>

    숫자 : <input id="num" type="text">
          <input type="button" value="확인" onclick="ok()">

    <script type="text/javascript">
        function ok(){
            let num = document.getElementById("num").value;
            //정규식 패턴(숫자만 입력할 수 있도록)
            let num_pattern = /^[0-9]+$/;  //0~9사이의 숫자 // /^[0-9]+$/(0~9사이의 숫자)
           
            // num_pattern.test(num)); 결과는 true 또는 false
            if( !num_pattern.test(num) ){
                alert("숫자만 입력할 수 있습니다.");
            }
        }
    </script>
   
</body>

</html>

 

onclick 숫자 :