Javascript : Event Object(event 객체)

2023. 3. 15. 17:21javascript

<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>JavaScript - Event Object</title>
    <link rel="stylesheet" href="../../css/reset.css">
    <link rel="stylesheet" href="../../css/dark.css">
    <style>
        #box1 {
            width: 300px;
            height: 300px;
            margin: 0 auto;
            padding: 20px;
            background-color: yellowgreen;
            color:navy;
        }
        #box2 {
            width: 200px;
            height: 200px;
            margin: 0 auto;
            padding: 20px;
            background-color: blueviolet;
        }
        #box3 {
            width: 100px;
            height: 100px;
            margin: 0 auto;
            padding: 20px;
            background-color: orange;
        }
    </style>
    <script>
        // 일반적으로 JavaScript 코드에서 요소를 탐색할 때
        // 해당 요소가 이미 DOM 에 만들어져 있어야한다.
        // head 태그 내에서 script 작성하면 body 내의 요소들이
        // 생성되지 않았기 때문에 조작이 불가능하다.

        var hello = document.getElementById("hello");
        console.log(hello);
        // hello.style.color = "orange";
        // → 현재 head 태그까지만 DOM 에 생성되었으며
        //   이후 요소들은 아직 해석되지 않았기 때문에
        //   조작이 불가능하다.

        // window 객체의 load 이벤트
        //  - 브라우저가 HTML 문서를 모두 읽고 해석한 다음
        //    DOM의 구축이 끝났을 때 발생하는 이벤트
        //  - 요소가 DOM 에 모두 생성되었기 때문에
        //    load 이벤트 핸들러 내에서는 모든 요소들을
        //    조작할 수 있다.

        window.onload = function() {
            // window 객체의 load 이벤트의 이벤트 핸들러

            var hello = document.getElementById("hello");
            console.log(hello);
            hello.style.backgroundColor="yellowgreen";
            hello.style.color="navy";
        }

    </script>
</head>
<body>
    <h1 id="hello" class="gray-box">Hello World!</h1>
    <script>
        // 이벤트 객체(event object)
        //  - 이벤트가 발생하면 자동으로 생성되는 객체
        //  - 이벤트가 발생했을 때의 정보를 가지고 있으며
        //    이벤트와 관련된 기능을 가지고 있다.
        //  - 이벤트 핸들러의 매개변수로 전달된다.

        var hello = document.getElementById("hello");
        hello.onclick = function( event ) {
            console.log(event);
        }
    </script>
    <hr>
    <div class="gray-box">
        <div id="box1">box1
            <div id="box2">box2
                <div id="box3">box3</div>
            </div>
        </div>
    </div>
    <script>
        // 이벤트 전달
        //  - 중첩된 다른 요소로 이벤트를 전달
        //  - 기본적인 이벤트 전달 방식은 '버블링'이다.
        //      → 하위 요소에서 상위 요소로 전달
        //  - 이벤트 전달 제거 메서드
        //      → event.stopPropagation();

        var box1 = document.getElementById("box1");
        var box2 = document.getElementById("box2");
        var box3 = document.getElementById("box3");

        function eventLog(event) {
            // this = 자기 자신 = 해당 함수를 수행하는 객체
            console.log(this.id + "'s handler");

            console.log("currentTarget : " + event.currentTarget.id);
            // → 현재 이벤트 핸들러를 수행하는 요소 객체

            console.log("target : " + event.target.id);
            // → 실제 이벤트가 발생한 요소 객체
            console.log("--------------------------");

            // 이벤트 전달 제거
            event.stopPropagation();
        }

        box1.onclick = eventLog;
        box2.onclick = eventLog;
        box3.onclick = eventLog;
    </script>
    <hr>
    <div class="gray-box">
        <a href="https://www.naver.com" id="link">Naver</a>
    </div>
    <script>
        // 기본 이벤트(defualt event)
        //  - 요소가 기본적으로 가지는 이벤트
        //  - 기본 이벤트를 수행하지 않으려면
        //    기본 이벤트를 제거해야한다.
        //  - a 요소, form 요소 ..
        var link = document.getElementById("link");
        link.onclick = function(event) {
            window.alert("권한이 부족합니다.");

            // 기본 이벤트 제거
            event.preventDefault();
        }
    </script>
</body>
</html>

'javascript' 카테고리의 다른 글

Javascript : Event(이벤트) 2  (0) 2023.03.15
Javascript : Event Model(이벤트 모델)  (0) 2023.03.15
Javascript : Event(이벤트) 1  (0) 2023.03.15
Javascript : Element 3  (0) 2023.03.15
Javascript : Element 2  (0) 2023.03.15