Events(이벤트)

하태현·2020년 11월 10일
0

javascript

목록 보기
8/23
post-thumbnail

Events

이벤트는 웹상에서 발생하는 사건. 즉, 사용자가 화면의 일부를 "클릭"하거나 "드래그" 등의 행위를 말한다.

모든 이벤트를 외울순 없다. 상황에 맞게 필요한 이벤트를 찾아서 적용할수 있도록 하자. (검색하는 습관을 들이자!!😎)

이벤트 발생을 감지하는 방법

자바스크립트를 이용해 DOM요소를 기준으로 이벤트를 감지하고 원하는 작업을 할수있다.

<div>
  <button>버튼</button>
</div>
const button = document.querySelector("button");
button.addEventListener("click", function onClick () {
  alert("경고!");
});

addEventListener 메소드는 두가지 인자를 받는다.

  1. "click" 문자열(이벤트 목록)
  2. onClick 함수(이벤트 발생시 실행할 함수)

addEventListener는 첫번째 인자로 받은 이벤트 발생 직후, 두번째 인자로 받은 함수를 실행한다.

<div>
  <button>버튼 1</button>
  <button>버튼 2</button>
</div>
const button = document.querySelector("button");
button.addEventListener("click", function onClick () {
  alert("클릭!");
});

이렇게 버튼이 2개 이상일때 위 같은 방법으로 사용하면 querySelector가 하나의 element만을 값으로 가지기 때문에 두개의 버튼 이벤트를 등록할 수 없다.

두 버튼에 이벤트를 등록하기

const button1 = document.querySelectorAll("button").[0];
const button2 = document.querySelectorAll("button")[1];
button1.addEventListener("click", function onClick () {
  alert("버튼 1 클릭!");
});
button2.addEventListener("click", function onClick () {
  alert("버튼 2 클릭!");
});

위 코드에서는 같은 코드가 반복되는 모습이 보인다... 좀더 효율적인 방법이 있지 않을까???🙄

버튼을 감싸고 있는 영역(<div>)에 이벤트 등록

const div = document.querySelector("div");
div.addEventListener("click", function onClick () {
  alert("클릭!");
});

이렇게 하면 div의 하위 element를 클릭해도 onButtonClick이 실행된다.
그런데 버튼1과 버튼2를 구분할수가 없게 되었다.....

이벤트 객체를 이용한 방법

  • 이벤트 객체는 현재 발생한 이벤트에 대한 상세 정보를 담고 있다.
  • event.target 속성은 이벤트가 발생한 요소를 가르킨다.
const div = document.querySelector("div");
div.addEventListener("click", function onlick (evnet) {
  alert(event.target.textContent+"를 클릭하셨습니다.");
});
  • 버튼 1을 클릭하면, "버튼 1를 클릭하셨습니다." 라고 출력.
  • 버튼 2을 클릭하면, "버튼 2를 클릭하셨습니다." 라고 출력.

    그러나 버튼이 아닌 부분을 클릭해도 이벤트가 발생한다.
    이부분을 해결해보자!!!
const div = document.querySelector("div");
div.addEventListener("click", function onlick (evnet) {
  if(event.target.tagName === "BUTTON"){
    alert(event.target.textContent+"를 클릭하셨습니다.");
  }  
});

위와 같은 방법으로 조건문을 통해 제어할수 있다.
프로그래밍에서선 정답이라고 딱 정해진것은 없다고 생각한다. 이렇게 여러가지 방법을 생각해보고 가장 효율적인 방법을 찾는 노력을 하자!!

profile
왜?를 생각하며 개발하기, 다양한 프로젝트를 경험하는 것 또한 중요하지만 내가 사용하는 기술이 어떤 배경과 이유에서 만들어진 건지, 코드를 작성할 때에도 이게 최선의 방법인지를 끊임없이 질문하고 고민하자. 이 과정은 앞으로 개발자로 커리어를 쌓아 나갈 때 중요한 발판이 될 것이다.

0개의 댓글