[Javascript] Event Object

CloudCoke
|2022. 11. 10. 17:26

이벤트 객체 (Event Object)


이벤트 등록을 할 때 addEventListener에 두 가지 인자를 전달해 주었다. 첫 번째 인자는 이벤트 이름이고 두 번째 인자는 이벤트 핸들러라고 부르는 사용자가 만든 함수이다. 이 함수에 이벤트가 발생하면 동작될 코드들을 넣어 놓게 된다. 이벤트가 발생되어서 이벤트 핸들러 함수가 호출이 되면 이벤트 객체를 전달받게 되는데 이벤트 핸들러 함수에 매개변수를 선언해주면 이벤트 객체를 사용할 수 있다.

<!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>
  </head>
  <body>
    <button class="btn">클릭</button>
    <script src="public/js/test.js"></script>
  </body>
</html>
const btn = document.querySelector(".btn");

btn.onclick = function (e) {
  console.log(e);
};

이벤트 객체

위 방법으로 이벤트를 등록해 이벤트 객체를 사용할 수 있지만 나는 아래 방법으로 이벤트를 등록해서 사용할 예정이다.

const btn2 = document.querySelector(".btn");

const btnHandler = function (e) {
  console.log(e);
};

btn2.addEventListener("click", btnHandler);

이벤트 객체

이벤트 객체 사용


이벤트 객체에는 여러 속성이 존재하지만 우선은 자주 사용하는 2가지 속성만 알아보자!

target 속성

target 속성은 이벤트를 발동시킨 요소를 말한다. 

const btn = document.querySelector(".btn");

const btnHandler = function (e) {
  console.log(e.target);
};

btn.addEventListener("click", btnHandler);

클릭 버튼을 눌렀을 때

target 속성을 이용해 Style도 변경이 가능하다. 이벤트가 발생했을 때 지정한 Style이 적용이 된다.

const btn = document.querySelector(".btn");

const btnHandler = function (e) {
  e.target.style = "background: green;";
};

btn.addEventListener("click", btnHandler);

클릭 버튼을 눌렀을 때

type 속성

type 속성은 어떤 이벤트가 발생했는지 확인할 때 유용하다. 

const btn = document.querySelector(".btn");

const btnHandler = function (e) {
  console.dir(e.type);
};

btn.addEventListener("click", btnHandler);
btn.addEventListener("mouseover", btnHandler);

이벤트 발생시 이벤트명이 출력되는 모습

type 속성은 등록된 이벤트가 실행됬을 때 어떤 이벤트 명으로 실행이 되었는지 알 수 있다.

활용하기


<!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>
  </head>
  <body>
    <button class="btn">클릭</button>
    <div class="display" style="background: red"></div>
    <script src="public/js/test.js"></script>
  </body>
</html>
const btn = document.querySelector(".btn");
const display = document.querySelector(".display");

const btnHandler = function (e) {
  if (e.type === "click") display.innerHTML = "마우스를 클릭했다!";
  if (e.type === "mouseover") display.innerHTML = "마우스를 올렸다!";
};

btn.addEventListener("click", btnHandler);
btn.addEventListener("mouseover", btnHandler);

이벤트 활용하기

이벤트가 발생했을 때 이벤트 객체의 type 속성을 이용해 마우스 클릭과 마우스오버를 구분해 display에 innerHTML로 텍스트를 추가해 주었다.

<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>
  <style>
    .a {
      background: red;
    }
    .b {
      background: orange;
    }
  </style>
</head>
<body>
  <button class="btn">버튼1</button>
  <button class="btn2">버튼2</button>
  <div id="display"></div>
  <script src="public/js/test.js"></script>
</body>
const btn = document.querySelector(".btn");
const btn2 = document.querySelector(".btn2");
const display = document.querySelector("#display");

function handler(e) {
  if (e.type === "click") {
    display.innerHTML = `${e.target.textContent} 클릭`;
    display.className = "a";
  } else if (e.type === "mouseover") {
    display.innerHTML = `${e.target.textContent}에 마우스를 올렸다!`;
    display.className = "b";
  }
}

function handler2(e) {
  display.innerHTML = "";
  display.className = "";
}

btn.addEventListener("click", handler);
btn.addEventListener("mouseover", handler);
btn.addEventListener("mouseout", handler2);
btn2.addEventListener("click", handler);
btn2.addEventListener("mouseover", handler);
btn2.addEventListener("mouseout", handler2);

이벤트가 발생했을 때 이벤트 객체의 type 속성을 이용해 마우스 클릭과 마우스오버를 구분해 display에 innerHTML로 텍스트를 추가해 주고 클래스명도 변경해주었다.