자바 스크립트 이벤트 감지 | Javascript에서 \”(E)\”는 무엇을 의미합니까? – 이벤트 핸들러 객체 설명 답을 믿으세요

당신은 주제를 찾고 있습니까 “자바 스크립트 이벤트 감지 – JavaScript에서 \”(e)\”는 무엇을 의미합니까? – 이벤트 핸들러 객체 설명“? 다음 카테고리의 웹사이트 you.maxfit.vn 에서 귀하의 모든 질문에 답변해 드립니다: https://you.maxfit.vn/blog. 바로 아래에서 답을 찾을 수 있습니다. 작성자 dcode 이(가) 작성한 기사에는 조회수 20,283회 및 좋아요 932개 개의 좋아요가 있습니다.

자바 스크립트 이벤트 감지 주제에 대한 동영상 보기

여기에서 이 주제에 대한 비디오를 시청하십시오. 주의 깊게 살펴보고 읽고 있는 내용에 대한 피드백을 제공하세요!

d여기에서 JavaScript에서 \”(e)\”는 무엇을 의미합니까? – 이벤트 핸들러 객체 설명 – 자바 스크립트 이벤트 감지 주제에 대한 세부정보를 참조하세요

The one thing that always confused me when I was learning JavaScript was what exactly the \”e\” or \”ev\” was when using events on things like button clicks or mouseovers – in this video, we take a look at how this object is useful for JavaScript coding.
For your reference, check this out:
https://developer.mozilla.org/en-US/docs/Web/API/Event
🏫 My Udemy Courses – https://www.udemy.com/user/domenic-corso/
🎨 Download my VS Code theme – https://marketplace.visualstudio.com/items?itemName=dcode.dcode-theme
💜 Join my Discord Server – https://discord.gg/TXMQyvbpcA
🐦 Find me on Twitter – https://twitter.com/dcodeyt
💸 Support me on Patreon – https://www.patreon.com/dcode
📰 Follow me on DEV Community – https://dev.to/dcodeyt
📹 Join this channel to get access to perks – https://www.youtube.com/channel/UCjX0FtIZBBVD3YoCcxnDC4g/join
If this video helped you out and you’d like to see more, make sure to leave a like and subscribe to dcode!
#dcode #javascript

자바 스크립트 이벤트 감지 주제에 대한 자세한 내용은 여기를 참조하세요.

JavaScript/jQuery로 요소의 클릭 이벤트 감지

이 게시물에서는 JavaScript 및 jQuery를 사용하여 요소에서 클릭 이벤트를 감지하는 방법에 대해 설명합니다. jQuery를 사용하면 .on() 메서드를 사용하여 하나 …

+ 여기에 보기

Source: www.techiedelight.com

Date Published: 6/9/2022

View: 1428

JavaScript로 이벤트 관리하기 – velog

이벤트 리스너란, 말 그대로 특정 이벤트가 발생했을 때 그것을 감지하는 … 자바스크립트는 이벤트 기반의 언어이기 때문에, 하나의 이벤트를 실행 …

+ 여기에 표시

Source: velog.io

Date Published: 11/15/2022

View: 1159

(JavaScript) 이벤트 리스너와 콜백(event listener, callback)

이벤트 리스너와 콜백 방식도 자바스크립트에서 많이 사용되는 방식입니다. 클로저나 IIFE처럼요. 그리고 반드시 알아두어야 합니다. 이 부분에서 많은 입문자들이 고통 …

+ 여기에 더 보기

Source: www.zerocho.com

Date Published: 2/7/2022

View: 2209

이벤트의 이해 [JavaScript][이벤트전파][이벤트막기]

DOM 객체에 할당되어 해당 객체의 이벤트 반응에 호출되어 처리되는 프로퍼티; 이벤트 핸들러의 역할. 이벤트 발생 감시; 이벤트 감지; 지정된 자바 …

+ 더 읽기

Source: toastfactory.tistory.com

Date Published: 11/29/2022

View: 7772

47. (javascript/자바스크립트) body 클릭 이벤트 감지, 동적 div …

(javascript/자바스크립트) body 클릭 이벤트 감지, 동적 div 레이아웃 생성 및 클릭 이벤트 확인 – document body onclick. 투케이2K 2021. 6. 10.

+ 여기에 더 보기

Source: kkh0977.tistory.com

Date Published: 7/12/2022

View: 78

[JavaScript] #7 이벤트리스너(EventListener) 사용법 및 예시 …

1. 이벤트 리스너(EventListener)란? – 특정 이벤트가 발생할 시 자바스크립트 객체에서 이를 감지하는 것. – 이러한 감지한 이벤트에 따라 특정 함수 …

+ 여기에 더 보기

Source: nack1400.tistory.com

Date Published: 5/20/2021

View: 2007

JavaScript – 이벤트

이벤트 핸들러 역할 : 이벤트 발생 감지 -> 이벤트 감지 -> 지정된 자바스크립트 코드 또는 함수 호출. 이벤트 모델 : 이벤트 핸들러와 이벤트 API의 …

+ 자세한 내용은 여기를 클릭하십시오

Source: milancode.tistory.com

Date Published: 1/21/2021

View: 6164

EventTarget.addEventListener() – Web API | MDN

DOM Level 3 Events와 JavaScript Event 순서에서 자세한 설명을 확인하세요. … 필요한 옵션에 대한 기능 감지 코드를 사용하세요.

+ 여기에 자세히 보기

Source: developer.mozilla.org

Date Published: 9/9/2022

View: 5066

JavaScript에서 키보드 입력 이벤트 감지 | Delft Stack

오늘 포스팅에서는 자바스크립트에서 키보드 입력 이벤트를 감지하는 방법을 알아보겠습니다.

+ 여기를 클릭

Source: www.delftstack.com

Date Published: 1/12/2021

View: 3309

Event | PoiemaWeb

브라우저는 이벤트를 감지할 수 있으며 이벤트 발생 시에는 통지해 준다. … 이처럼 자바스크립트의 동시성(Concurrency)을 지원하는 것이 바로 이벤트 루프(Event …

+ 여기에 보기

Source: poiemaweb.com

Date Published: 3/11/2021

View: 6443

주제와 관련된 이미지 자바 스크립트 이벤트 감지

주제와 관련된 더 많은 사진을 참조하십시오 JavaScript에서 \”(e)\”는 무엇을 의미합니까? – 이벤트 핸들러 객체 설명. 댓글에서 더 많은 관련 이미지를 보거나 필요한 경우 더 많은 관련 기사를 볼 수 있습니다.

JavaScript에서 \
JavaScript에서 \”(e)\”는 무엇을 의미합니까? – 이벤트 핸들러 객체 설명

주제에 대한 기사 평가 자바 스크립트 이벤트 감지

  • Author: dcode
  • Views: 조회수 20,283회
  • Likes: 좋아요 932개
  • Date Published: 2021. 7. 27.
  • Video Url link: https://www.youtube.com/watch?v=_BVkOvpyRI0

이벤트의 이해 [JavaScript][이벤트전파][이벤트막기]

반응형

이벤트

[광고 누르면 오늘의 행운 상승!!]

이벤트 : 웹 브라우저에서 웹 문서에 특별한 일이 있을 때 발생하는 신호

예) 텍스트 입력 서식에 커서가 위치, 텍스트 입력, 마우스 이동, 보튼 클릭, 이미지 로딩 등

이벤트 핸들러

DOM 객체에 할당되어 해당 객체의 이벤트 반응에 호출되어 처리되는 프로퍼티

이벤트 핸들러의 역할

이벤트 발생 감시 이벤트 감지 지정된 자바스크립트 코드 또는 함수 호출

이벤트 모델

이벤트 핸들러와 이벤트 API 정리

웹 브라우저와 시기별로 3가지의 다른 이벤트 모델 존재 → 이유 : 웹브라우저의 종류에 따라 변화되고 개선

기본 이벤트 모델(Original event model)

오래된 모델

마이크로 소프트 인터넷 익스플로러 버전 8 이하와 호환 안됨

기술적으로 부족함 → DOM Level 0 이벤트 모델

표준 이벤트 모델(Standard event model)

기본 이벤트 모델 개선화, 표준화

현재 마이크로소프트 인터넷 익스프롤러 버전 9 이상과 다른 모든 웹브라우저에서 지원

표준 이벤트 모델 사용을 강력히 권장 → DOM Level 2 이벤트 모델

인터넷 익스플로러 이벤트 모델(Internet Explorer event model)

마이크로 소프트 인터넷 익스플로러 버전 8까지의 독자적인 이벤트 모델

다른 웹 브라우저에서는 지원하지 않음

현재는 사용하지 않음

이벤트 모델의 이벤트 핸들러 종류

<<마우스 관련 이벤트>>

onclick : 마우스 클릭을 감지 onmousedown : 마우스 단추가 눌렸는지를 감지 onmouseup : 눌려졌던 마우스 단추가 올려졌는지를 감지 onmouseover : 마우스 커서가 특정 객체 위에 올라갔는지를 감지 onmouseout : 마우스 커서가 특정 객체에서 벗어났는지를 감지 onmousemove : 마우스 커서의 이동을 감지

<<로딩 관련 이벤트 핸들러>>

onload : 이미지 또는 화면 로딩이 완료 되었는지를 감지 onunload : 현재 화면에서 벗어날 때를 감지(링크로 페이지 이동 등)

<<서식 관련 이벤트 핸들러>>

onsubmit / onreset : 서식이 전송 / 재설정 될 때를 감지 onfocus / onblur : 특정 서식 요소에 마우스 커서나 텍스트 커서가 접근함 / 벗어남 감지

<<키보드 관련 이벤트 핸들러>>

onkeydown : 키보드가 눌렸는지를 감지 onkeypress : 키보드가 눌려지고 있는지를 감지 onkeyup : 눌려진 키보드가 올려졌는지를 감지

<<그 외 HTML5의 이벤트 핸들러>>

onbeforeonload : 도큐먼트 로딩 전에 이벤트 감지 onhaschange : 도큐먼트에 변화가 있을 때 발생하는 이벤트 감지 onmousewheel : 마우스 휠을 돌릴 때 발생하는 이벤트 감지 onplay : 로딩 된 미디어 파일이 재생될 때 발생하는 이벤트 감지

이벤트 기본 기능 막기

SecondPage return 값 참 -> 코드 : return true; 기본 이벤트 기능 수행 -> second.html 페이지로 이동 return 값 거짓 -> 코드 : return false; 기본 이벤트 기능 수행 안함 -> second.html 페이지로 이동 안함 -> 기본으로 작동하는 기능 실행 막음 ※ return 문을 쓰지 않으면 기본적으로 참 값 리턴 ※

자바스크립트에서 이벤트 할당

예1) window.onload = init;

화면 로딩이 완료되면 init 함수를 호출

window.onload = init; // O window.onload = init(); // X HTML속성으로 적용된 이벤트 핸들러는 JavaScript의 반환값을 할당받지만 Javascript에서 DOM객체의 프로퍼티로 적용된 이벤트 핸들러는 함수 자체를 호출한다.

예2) 웹 페이지 내 특정한 객체에 이벤트 핸들러 적용

document.form[0].element[0].onfocus = viewCaution; document.getElementById(“next”).onclick = goNext;

이벤트 인터페이스 (이벤트 API)

호출 함수는 이벤트 객체를 인자로 받음

전달 받은 이벤트 객체는 이벤트 API를 이용하여 각종 이벤트 정보를 구함

예) 이벤트 인터페이스

웹 페이지 내, 클릭한 곳의 좌표를 얻는 코드

function mousePos(event){ var mousePosX = event.clientX; var mousePosY = event.clientY; var outputString = “X=” + mousePosX + “, Y=” + mousePosY; alert(outputString); clientX, clientY를 이용하여 웹페이지 좌표를 얻어 경고창으로 제시 이벤트 프로퍼티 : clientX, clientY, screenY, keyCode, altKey, shiftKey, type }

표준 이벤트 모델

기본 이벤트 모델의 문제점을 보완하고 추가적인 API를 포함하여 표준으로 공표한 이벤트 모델

DOM Level 2 Event Model

다양한 이벤트 API

고급 이벤트 처리 방식(복잡하고 정밀한 이벤트 전파 제어)

addEventListener

DOM 객체에 이벤트 핸들러 함수를 적용

예) Drag & Drop 예제 코드

document.addEventListener(‘load’ , dragNdropInit, true); 페이지 로딩 완료 이벤트 발생 시 dragNdrop 함수 호출 -addEventListener의 인자 1. 이벤트 핸들러 ‘load’ (기본 이벤트 모델 : onload) 2. 실행 될 함수 : dragNdropInit 3. 이벤트 감지 : true(참/거짓) function dragNdropInit(){ document.getElementById(“drag”).addEventListener(‘mousedown’, mouseDown, true); document.getElementById(“drag”).addEventListener(‘mouseup’, mouseUp, true); } addEventListener를 ID ‘drag’인 객체에 적용 마우스로 럭비공 끌고 다니기 설정 : CSS에서 포지션 릴레이티브로 지정 1. mousedown : 마우스 눌렀을 때 2. mouseup : 누른 마우스를 풀었을 때

기본 이벤트 기능 막기

preventDefault(); : 이벤트 API를 이용하여 이벤트 기본 기능 작동을 막음

function mouseDown(event){ event.preventDefalut(); //이벤트 기본 기능 작동 멈추게 함 //마우스로 끌기 효과 만드려면 반드시 마우스 누르는 이벤트 기본 기능이 멈추어야 함 dragNdropInit.objPosX = event.target.offsetLeft – 8; dragNdropInit.objPosY = event.target.offsetTop[ – 8; //target : 이벤트가 발생한 객체 // -> event.target : id 가 drag인 객체 //offsetTop : top위치 값 읽기 // -8한 이유 : 기본적인 body 마진 제거 document.getElementById(“drag”).addEventListener(‘mousemove’, mouseMove, true); //이벤트 리스너 : 마우스 움직임 발생 시 이벤트 감지 -> addEventListener : 마우스가 단추 누른 상태에서 움직임 감지 }

this와 target

function mouseMove(event){ var newPosX = event.clientX; var newPosY = event.clientY; event.target.style.left = dragNdropInit.objPosX + newPosX – dragNdropInit.startPosX + “px”; //이벤트 발생한 객체에 left, top 스타일을 새로 지정 // -> 마우스가 커서 따라가게 함 this.style.top = dragNdropInit.objPosY + newPosY – dragNdropInit.startPosY + “px”; // event.target가 아닌 this 사용 // 이벤트 핸들러가 호출하는 함수의 this역할 : 이벤트가 발생한 객체 // event.target == this } ※ event.target과 this 둘중에 한 가지만 사용하는 것이 좋음 특히 event.target사용이 이벤트 전파시 발생하는 문제 피할 수 있음!

이벤트 핸들러 제거

removeEventListener를 이용

짝이되는 addEventListenr와 똑같은 세가지 인자를 가지고 있어야 함

function mouseUp(event){ document.getElementById(“drag”).removeEventListener(‘mousemove’, mouseMove, true); }

이벤트 전파의 이해

이벤트 전파 : 발생한 이벤트는 상위 노드로 전파된다.

이벤트 전파의 3단계

document 노드 → 이벤트 발생 노드 이벤트 발생 노드 이벤트 발생 노드 → document 노드

addEventListener의 이벤트 전파 관련 인자

addEventListener의 마지막 인자가 이벤트 전파 관련 인자

addEventListener(‘click’, bang, false);

<<참일경우>>

이벤트 전파 전 과정에서 이벤트 호출 감지 이벤트 캡쳐링, 케스케이드 다운이라고 부름 3 -> 2 -> 1(누른 객체)

<<거짓일 경우>>

두 번째와 세 번째 과정 이벤트 대상 객체부터 document까지 내려가는 과정 이벤트 호출 감지 이벤트 버블링 또는 버블 업 이라고 부름 1(누른 객체) -> 2 -> 3

이벤트 전파 방지

stopPropagation : 이벤트 전파를 막는 이벤트 API

window.addEventListener(‘load’ , init, false); function init(event){ document.getElementById(“apple”).addEventListener(‘click’, bang, false); document.getElementById(“lemon”).addEventListener(‘click’, bang, false); document.getElementById(“strawberry”).addEventListener(‘click’, bang, false); } function bang (event){ var targetName = event.currentTarget.getAttribute(“id”); if(targetName == ‘lemon’) event stopPropagation() // 더이상 전파를 막음 alert(targetName); }

currentTarget

전파된 이벤트가 도착한 객체

function bang (event){ var targetName = event.currentTarget.getAttribute(“id”); var outputString = “현재 이벤트가 도착한 객체는 ” targetName + “입니다”; alert(outputString ); }

eventPhase

세 단계의 이벤트 전파 과정 중 현 단계가 몇 단계인지 알려줌

function bang (event){ var targetName = event.currentTarget.getAttribute(“id”); var outputString = “현재 이벤트가 도착한 객체는 ” targetName + “입니다”; outputString += targetName+”은” + event.eventPhase + “번 째 이벤트 전파 단계입니다”; alert(outputString ); }

timeStamp

이벤트 발생 시간을 밀리초 단위로 알려줌

var eventTime = new Date(event.timeStamp).toLocalTimeString();

반응형

47. (javascript/자바스크립트) body 클릭 이벤트 감지, 동적 div 레이아웃 생성 및 클릭 이벤트 확인

728×90

반응형

/* =========================== */

[ 개발 환경 설정 ]

개발 툴 : Edit++

개발 언어 : javascript

/* =========================== */

/* =========================== */

[소스 코드]

HTML TEST

동적 추가

/* =========================== */

/* =========================== */

[결과 출력]

/* =========================== */

/* =========================== */

[요약 설명]

/*

[CSS 요소 설명]

1. font-family : 폰트 표시 형태 스타일 지정

2. width : 가로 크기 지정

3. height : 세로 크기 지정

4. margin : 마진 (외부) 여백 설정

5. padding : 패딩 (내부) 여백 설정

6. border : 테두리 (선) 표시 설정

7. background : 배경 표시 설정

8. overflow : 범위를 벗어난 콘텐츠 표시 여부 설정 (스크롤)

9. float : 정렬 기준 설정

10. div : 레이아웃 표시 블록

11. position : 레이아웃 위치 정렬 설정

12. cursor : 마우스 커서 스타일 정의

[CSS 세부 설명]

1. width : 100%; : 가로 크기를 (%)로 지정 - 반응형 설정

2. margin : 0 auto; : 중앙 배치 설정

3. border : none; : 테두리 스타일 없음 설정

4. background-color : #343d46; : rgb 색상을 사용해 배경색 지정

5. position : relative; : 부모를 기준으로 위치를 정렬합니다

6. cursor : pointer; : 마우스 커서를 포인터 모양으로 설정

7. float : top; : 세로 기준으로 정렬

8. float : left; : 수평 왼쪽 기준으로 정렬

*/

/*

[JS 요약 설명]

1. document.createElement : 특정 태그를 생성합니다

2. setAttribute : 특정 태그 속성값을 지정합니다

3. appendChild : 어느 부모에 추가할지를 결정합니다

4. window.onload : 웹브라우저 로딩 완료 상태를 정의합니다

5. document.body.onclick : body 영역에 있는 태그 이벤트 클릭을 감지합니다

6. includes : 특정 문자열이 포함된 것을 확인합니다

7. isNaN : 숫자여부를 판단합니다 (문자 = true / 숫자 = false)

8. innerText : 특정 태그 텍스트 값을 알아옵니다

*/

/* =========================== */

728x90

반응형

[JavaScript] #7 이벤트리스너(EventListener) 사용법 및 예시(자바스크립트 동적 웹 구현, html 클래스 변경, 이벤트 처리)

728x90

반응형

이벤트 리스너와 몇 가지 예시, html 클래스 변경 방법에 대해서 정리해보겠습니다.

1. 이벤트 리스너(EventListener)란?

- 특정 이벤트가 발생할 시 자바스크립트 객체에서 이를 감지하는 것

- 이러한 감지한 이벤트에 따라 특정 함수를 호출하거나 값을 변경하는 것을 이벤트 처리라고 한다.

2. 이벤트 리스너 및 처리 예시

See the Pen Untitled by KwonRakhyun (@nack1400) on CodePen.

3. html 클래스 추가 및 삭제, 변경

See the Pen Untitled by KwonRakhyun (@nack1400) on CodePen.

if/else로 만든 함수는 classList의 api를 여러 개 사용

contain : 해당 클래스가 있는지 확인, remove : 해당 클래스 제거, add : 해당 클래스 추가

toggle을 활용하면 더 쉽게 나타낼 수 있다.

toggle : 태그 안에 클래스가 있는지 확인해주고 없다면 넣어주고 있다면 빼줌

이상 이벤트 리스너와 처리, 자바스크립트로 html 클래스 변경하는 방법까지 정리해보았습니다.

728x90

반응형

JavaScript

Curring(커링)이란?

커링(Currying) 커링(Curring)이란? 커링은 인자를 여러개 받는 함수를 분리하여, 인자를 하나씩만 받는 함수의 체인으로 만드는 방법이다. 함수형 프로그래밍 기법 중 하나로 함수를 재사용하는데 유용하게 쓰일 수 있는 기법이다. 자바스크립트 내부에는 커링이 내장되어 있지 않지만 자바스크립트로도 구현이 가능하다. 예를 들어 위의 함수가 제대로...

velog.io

EventTarget.addEventListener() - Web API

비슷한 요소 다수의 이벤트를 모두 처리할 수 있는 범용 수신기를 정의하는 경우, 부착된 요소의 참조를 가져와야 하는 상황이 종종 발생합니다.

addEventListener() 를 사용해 요소에 수신기를 부착하게 되면 수신기 내부의 this 값은 대상 요소를 가리키게 되며, 이는 수신기가 매개변수로 받게 되는 이벤트 객체의 currentTarget 속성과 같습니다.

my_element . addEventListener ( 'click' , function ( e ) { console . log ( this . className ) console . log ( e . currentTarget === this ) } )

다만 화살표 함수는 스스로의 this 맥락을 가지지 않는다는 점을 기억해야 합니다.

my_element . addEventListener ( 'click' , ( e ) => { console . log ( this . className ) console . log ( e . currentTarget === this ) } )

HTML 소스 코드에서 ( onclick 특성 등을 사용해) 요소의 이벤트 수신기를 지정하는 경우, 이벤트 수신기 특성 내의 JavaScript 코드는 가상의 함수로 감싸인 후, 감싼 함수의 this 를 addEventListener() 와 같은 방식으로 바인딩하는 것으로 생각할 수 있습니다. 즉, 해당 특성의 값에서 등장하는 this 는 특성이 속한 요소를 가리킵니다.

< table id = " my_table " onclick = " console . log ( this . id ) ; " > ...

참고로 이벤트 수신기 특성 안에서 호출한 함수의 this 는 표준 규칙을 따라가며, 아래 코드로 확인할 수 있습니다.

< script > function logID ( ) { console . log ( this . id ) ; } < table id = " my_table " onclick = " logID ( ) ; " > ...

logID() 내의 this 는 전역 객체 Window 의 참조가 됩니다. (단, 엄격 모드에서는 undefined )

bind()로 this 설정하기

Function.prototype.bind() 메서드를 사용하면 모든 후속 호출의 this 맥락을 고정할 수 있으므로, this 의 값이 호출 위치에 따라 달라져서 정확히 파악하기 힘들 때 발생하는 문제를 먼저 방지할 수 있습니다. 다만, 바인드한 함수 참조를 어딘가에 보관해놔야 나중에 수신기를 제거할 수 있습니다.

다음은 bind() 를 사용하는 수신기와 사용하지 않는 수신기의 모습입니다.

const Something = function ( element ) { this . name = 'Something Good' ; this . onclick1 = function ( event ) { console . log ( this . name ) ; } ; this . onclick2 = function ( event ) { console . log ( this . name ) ; } ; this . onclick2 = this . onclick2 . bind ( this ) ; element . addEventListener ( 'click' , this . onclick1 , false ) ; element . addEventListener ( 'click' , this . onclick2 , false ) ; } const s = new Something ( document . body ) ;

다른 방법으로는 handleEvent() 라는 특별한 이름의 메서드를 구현해 모든 이벤트에 대응하는 것입니다.

const Something = function ( element ) { this . name = 'Something Good' ; this . handleEvent = function ( event ) { console . log ( this . name ) ; switch ( event . type ) { case 'click' : break ; case 'dblclick' : break ; } } ; element . addEventListener ( 'click' , this , false ) ; element . addEventListener ( 'dblclick' , this , false ) ; element . removeEventListener ( 'click' , this , false ) ; element . removeEventListener ( 'dblclick' , this , false ) ; } const s = new Something ( document . body ) ;

this 참조를 처리할 수 있는 또 다른 방법으로는 객체의 필드에 접근해야 하는 메서드를 익명 함수로 감싸서 제공하는 것이 있습니다.

JavaScript에서 키보드 입력 이벤트 감지

이벤트 리스너는 단순히 특정 사용자 입력 이벤트가 발생할 때 트리거되는 JavaScript 함수입니다. 이러한 이벤트의 간단한 예는 마우스 클릭 또는 키보드 버튼 누름입니다. 이벤트 리스너 기능은 먼저 대상에 등록해야 합니다. 그 후, 관심 있는 특정 이벤트가 발생할 때마다 리스너 기능이 트리거됩니다. 동일하거나 다른 이벤트 유형을 수신할 수 있는 동일한 대상에 여러 리스너를 연결할 수 있습니다.

오늘의 포스트는 JavaScript에서 키보드 입력 이벤트를 인식하는 방법을 보여줍니다.

JavaScript에서 addEventListener() 를 사용하여 키보드 입력 이벤트 감지

이벤트 리스너를 등록하는 JavaScript에서 제공하는 내장 메소드입니다. EventTarget 인터페이스의 메소드입니다. 지정된 이벤트가 대상에서 감지될 때마다 구성된 함수가 호출됩니다.

통사론

target.addEventListener($type, $listener); target.addEventListener($type, $listener, $options); target.addEventListener($type, $listener, $useCapture);

매개변수

$type : 청취할 이벤트의 유형을 지정하는 문자열만 허용하는 필수 매개변수입니다. 대소문자를 구분하며 mouse , keyboard , input , database 등과 같은 다양한 이벤트를 지원합니다.

: 청취할 이벤트의 유형을 지정하는 문자열만 허용하는 필수 매개변수입니다. 대소문자를 구분하며 , , , 등과 같은 다양한 이벤트를 지원합니다. $listener : 지정된 유형의 이벤트가 발생하면 알림을 받을 객체인 필수 매개변수입니다. 이 개체는 EventListener 인터페이스 또는 JavaScript 기능을 구현해야 합니다.

: 지정된 유형의 이벤트가 발생하면 알림을 받을 객체인 필수 매개변수입니다. 이 개체는 EventListener 인터페이스 또는 JavaScript 기능을 구현해야 합니다. $options : 이벤트 리스너의 특성을 지정하는 선택적 매개변수입니다. 일부 특성은 capture , once , passive 및 signal 입니다.

: 이벤트 리스너의 특성을 지정하는 선택적 매개변수입니다. 일부 특성은 , , 및 입니다. $useCapture : 이 유형의 이벤트가 DOM 트리 아래의 EventTarget으로 전송되기 전에 등록된 리스너로 전송되는지 여부를 나타내는 Boolean 값을 허용하는 선택적 매개변수입니다.

keydown , keypress 및 keyup 을 들을 수 있는 세 가지 유형의 키보드 이벤트가 있습니다. 브라우저는 키보드의 키를 눌렀을 때 keydown 이벤트를 발생시키고, 키를 놓으면 keyup 이벤트를 발생시킵니다. 각 키보드 이벤트에는 고유한 keyCode 또는 key 가 있습니다. 예를 들어 Enter 버튼에는 Enter 키와 13 키 코드가 있습니다.

Please enable JavaScript Doc Translator: 문서 번역기는 어떻게 사용합니까?

예제 코드:

document.getElementById("textId").addEventListener("keydown", myFunction); function myFunction() { switch (event.key) { case "ArrowDown": console.log("ArrowDown"); break; case "ArrowUp": console.log("ArrowUp"); break; case "ArrowLeft": console.log("ArrowLeft"); break; case "ArrowRight": console.log("ArrowRight"); break; default: console.log(event.key, event.keyCode); return; } event.preventDefault(); }

출력:

PoiemaWeb

1. Introduction

이벤트(event)는 어떤 사건을 의미한다. 브라우저에서의 이벤트란 예를 들어 사용자가 버튼을 클릭했을 때, 웹페이지가 로드되었을 때와 같은 것인데 이것은 DOM 요소와 관련이 있다.

이벤트가 발생하는 시점이나 순서를 사전에 인지할 수 없으므로 일반적인 제어 흐름과는 다른 접근 방식이 필요하다. 즉, 이벤트가 발생하면 누군가 이를 감지할 수 있어야 하며 그에 대응하는 처리를 호출해 주어야 한다.

브라우저는 이벤트를 감지할 수 있으며 이벤트 발생 시에는 통지해 준다. 이 과정을 통해 사용자와 웹페이지는 상호작용(Interaction)이 가능하게 된다.

이벤트가 발생하면 그에 맞는 반응을 하여야 한다. 이를 위해 이벤트는 일반적으로 함수에 연결되며 그 함수는 이벤트가 발생하기 전에는 실행되지 않다가 이벤트가 발생되면 실행된다. 이 함수를 이벤트 핸들러라 하며 이벤트에 대응하는 처리를 기술한다.

2. 이벤트 루프(Event Loop)와 동시성(Concurrency)

브라우저는 단일 쓰레드(single-thread)에서 이벤트 드리븐(event-driven) 방식으로 동작한다.

단일 쓰레드는 쓰레드가 하나뿐이라는 의미이며 이말은 곧 하나의 작업(task)만을 처리할 수 있다는 것을 의미한다. 하지만 실제로 동작하는 웹 애플리케이션은 많은 task가 동시에 처리되는 것처럼 느껴진다. 이처럼 자바스크립트의 동시성(Concurrency)을 지원하는 것이 바로 이벤트 루프(Event Loop)이다.

브라우저의 환경을 그림으로 표현하면 아래와 같다.

이벤트 루프(Event Loop)와 브라우저의 환경

구글의 V8을 비롯한 대부분의 자바스크립트 엔진은 크게 2개의 영역으로 나뉜다.

Call Stack(호출 스택) 작업이 요청되면(함수가 호출되면) 요청된 작업은 순차적으로 Call Stack에 쌓이게 되고 순차적으로 실행된다. 자바스크립트는 단 하나의 Call Stack을 사용하기 때문에 해당 task가 종료하기 전까지는 다른 어떤 task도 수행될 수 없다. Heap 동적으로 생성된 객체 인스턴스가 할당되는 영역이다.

이와 같이 자바스크립트 엔진은 단순히 작업이 요청되면 Call Stack을 사용하여 요청된 작업을 순차적으로 실행할 뿐이다. 앞에서 언급한 동시성(Concurrency)을 지원하기 위해 필요한 비동기 요청(이벤트를 포함) 처리는 자바스크립트 엔진을 구동하는 환경 즉 브라우저(또는 Node.js)가 담당한다.

Event Queue(Task Queue) 비동기 처리 함수의 콜백 함수, 비동기식 이벤트 핸들러, Timer 함수(setTimeout(), setInterval())의 콜백 함수가 보관되는 영역으로 이벤트 루프(Event Loop)에 의해 특정 시점(Call Stack이 비어졌을 때)에 순차적으로 Call Stack으로 이동되어 실행된다. Event Loop(이벤트 루프) Call Stack 내에서 현재 실행중인 task가 있는지 그리고 Event Queue에 task가 있는지 반복하여 확인한다. 만약 Call Stack이 비어있다면 Event Queue 내의 task가 Call Stack으로 이동하고 실행된다.

아래의 예제가 어떻게 동작할지 살펴보자.

function func1() { console.log('func1'); func2(); } function func2() { setTimeout(function () { console.log('func2'); }, 0); func3(); } function func3() { console.log('func3'); } func1();

함수 func1이 호출되면 함수 func1은 Call Stack에 쌓인다. 그리고 함수 func1은 함수 func2을 호출하므로 함수 func2가 Call Stack에 쌓이고 setTimeout가 호출된다. setTimeout의 콜백함수는 즉시 실행되지 않고 지정 대기 시간만큼 기다리다가 “tick” 이벤트가 발생하면 태스크 큐로 이동한 후 Call Stack이 비어졌을 때 Call Stack으로 이동되어 실행된다.

이벤트 루프(Event Loop)에 의한 setTimeout 콜백함수의 실행

DOM 이벤트 핸들러도 이와 같이 동작한다.

function func1() { console.log('func1'); func2(); } function func2() { // const elem = document.querySelector('.foo'); elem.addEventListener('click', function () { this.style.backgroundColor = 'indigo'; console.log('func2'); }); func3(); } function func3() { console.log('func3'); } func1();

함수 func1이 호출되면 함수 func1은 Call Stack에 쌓인다. 그리고 함수 func1은 함수 func2을 호출하므로 함수 func2가 Call Stack에 쌓이고 addEventListener가 호출된다. addEventListener의 콜백함수는 foo 버튼이 클릭되어 click 이벤트가 발생하면 태스크 큐로 이동한 후 Call Stack이 비어졌을 때 Call Stack으로 이동되어 실행된다.

3. 이벤트의 종류

대표적인 이벤트를 소개한다. 자세한 사항은 Event reference을 참조 바란다.

3.1 UI Event

Event Description load 웹페이지의 로드가 완료되었을 때 unload 웹페이지가 언로드될 때(주로 새로운 페이지를 요청한 경우) error 브라우저가 자바스크립트 오류를 만났거나 요청한 자원이 존재하지 않는 경우 resize 브라우저 창의 크기를 조절했을 때 scroll 사용자가 페이지를 위아래로 스크롤할 때 select 텍스트를 선택했을 때

3.2 Keyboard Event

Event Description keydown 키를 누르고 있을 때 keyup 누르고 있던 키를 뗄 때 keypress 키를 누르고 뗏을 때

3.3 Mouse Event

Event Description click 마우스 버튼을 클릭했을 때 dbclick 마우스 버튼을 더블 클릭했을 때 mousedown 마우스 버튼을 누르고 있을 때 mouseup 누르고 있던 마우스 버튼을 뗄 때 mousemove 마우스를 움직일 때 (터치스크린에서 동작하지 않는다) mouseover 마우스를 요소 위로 움직였을 때 (터치스크린에서 동작하지 않는다) mouseout 마우스를 요소 밖으로 움직였을 때 (터치스크린에서 동작하지 않는다)

3.4 Focus Event

Event Description focus/focusin 요소가 포커스를 얻었을 때 blur/foucusout 요소가 포커스를 잃었을 때

3.5 Form Event

Event Description input input 또는 textarea 요소의 값이 변경되었을 때 contenteditable 어트리뷰트를 가진 요소의 값이 변경되었을 때 change select box, checkbox, radio button의 상태가 변경되었을 때 submit form을 submit할 때 (버튼 또는 키) reset reset 버튼을 클릭할 때 (최근에는 사용 안함)

3.6 Clipboard Event

Event Description cut 콘텐츠를 잘라내기할 때 copy 콘텐츠를 복사할 때 paste 콘텐츠를 붙여넣기할 때

4. 이벤트 핸들러 등록

이벤트가 발생했을 때 동작할 이벤트 핸들러를 이벤트에 등록하는 방법은 아래와 같이 3가지이다.

4.1 인라인 이벤트 핸들러 방식

HTML 요소의 이벤트 핸들러 어트리뷰트에 이벤트 핸들러를 등록하는 방법이다.

이 방식은 더 이상 사용되지 않으며 사용해서도 않된다. 오래된 코드에서 간혹 이 방식을 사용한 것이 있기 때문에 알아둘 필요는 있다. HTML과 Javascript는 관심사가 다르므로 분리하는 것이 좋다.

최근 관심을 받고 있는 CBD(Component Based Development) 방식의 Angular/React/Vue.js와 같은 프레임워크/라이브러리에서는 인라인 이벤트 핸들러 방식으로 이벤트를 처리한다. CBD에서는 HTML, CSS, 자바스크립트를 뷰를 구성하기 위한 구성 요소로 보기 때문에 관심사가 다르다고 생각하지 않는다.

주의할 것은 onclick과 같이 on으로 시작하는 이벤트 어트리뷰트의 값으로 함수 호출을 전달한다는 것이다. 다음에 살펴볼 이벤트 핸들러 프로퍼티 방식에는 DOM 요소의 이벤트 핸들러 프로퍼티에 함수 호출이 아닌 함수를 전달한다.

이때 이벤트 어트리뷰트의 값으로 전달한 함수 호출이 즉시 호출되는 것은 아니다. 사실은 이벤트 어트리뷰트 키를 이름으로 갖는 함수를 암묵적으로 정의하고 그 함수의 몸체에 이벤트 어트리뷰트의 값으로 전달한 함수 호출을 문으로 갖는다. 위 예제의 경우, button 요소의 onclick 프로퍼티에 함수 function onclick(event) { foo(); } 가 할당된다.

즉, 이벤트 어트리뷰트의 값은 암묵적으로 정의되는 이벤트 핸들러의 문이다. 따라서 아래와 같이 여러 개의 문을 전달할 수 있다.

4.2 이벤트 핸들러 프로퍼티 방식

인라인 이벤트 핸들러 방식처럼 HTML과 Javascript가 뒤섞이는 문제는 해결할 수 있는 방식이다. 하지만 이벤트 핸들러 프로퍼티에 하나의 이벤트 핸들러만을 바인딩할 수 있다는 단점이 있다.

4.3 addEventListener 메소드 방식

addEventListener 메소드를 이용하여 대상 DOM 요소에 이벤트를 바인딩하고 해당 이벤트가 발생했을 때 실행될 콜백 함수(이벤트 핸들러)를 지정한다.

addEventListener 메소드

addEventListener 함수 방식은 이전 방식에 비해 아래와 같이 보다 나은 장점을 갖는다.

하나의 이벤트에 대해 하나 이상의 이벤트 핸들러를 추가할 수 있다.

캡처링과 버블링을 지원한다.

HTML 요소뿐만아니라 모든 DOM 요소(HTML, XML, SVG)에 대해 동작한다. 브라우저는 웹 문서(HTML, XML, SVG)를 로드한 후, 파싱하여 DOM을 생성한다.

addEventListener 메소드는 IE 9 이상에서 동작한다. IE 8 이하에서는 attachEvent 메소드를 사용한다.

if (elem.addEventListener) { // IE 9 ~ elem.addEventListener('click', func); } else if (elem.attachEvent) { // ~ IE 8 elem.attachEvent('onclick', func); }

addEventListener 메소드의 사용 예제를 살펴보자.

위와 같이 대상 DOM 요소(target)를 지정하지 않으면 전역객체 window, 즉 DOM 문서를 포함한 브라우저의 윈도우에서 발생하는 click 이벤트에 이벤트 핸들러를 바인딩한다. 따라서 브라우저 윈도우 어디를 클릭하여도 이벤트 핸들러가 동작한다.

위 예제는 input 요소에서 발생하는 blur 이벤트에 이벤트 핸들러를 바인딩하였다. 사용자 이름이 최소 2자 이상이야한다는 규칙을 세우고 이에 부합하는지 확인해보자.

2자 이상이라는 규칙이 바뀌면 이 규칙을 확인하는 모든 코드를 수정해야 한다. 따라서 이러한 방식의 코딩은 바람직하지 않다. 이유는 규모가 큰 프로그램의 경우 수정과 테스트에 소요되는 자원의 낭비도 문제이지만 수정에는 거의 대부분 실수가 동반되기 때문이다.

2자 이상이라는 규칙을 상수화하고 함수의 인수로 전달도록 수정하자. 이렇게 하면 규칙이 변경되어도 함수는 수정하지 않아도 된다.

그런데 addEventListener 메소드의 두번째 매개변수는 이벤트가 발생했을 때 호출될 이벤트 핸들러이다. 이때 두번째 매개변수에는 함수 호출이 아니라 함수 자체를 지정하여야 한다.

function foo() { alert('clicked!'); } // elem.addEventListener('click', foo()); // 이벤트 발생 시까지 대기하지 않고 바로 실행된다 elem.addEventListener('click', foo); // 이벤트 발생 시까지 대기한다

따라서 이벤트 핸들러 프로퍼티 방식과 같이 이벤트 핸들러 함수에 인수를 전달할 수 없는 문제가 발생한다. 이를 우회하는 방법은 아래와 같다.

5. 이벤트 핸들러 함수 내부의 this

5.1 인라인 이벤트 핸들러 방식

인라인 이벤트 핸들러 방식의 경우, 이벤트 핸들러는 일반 함수로서 호출되므로 이벤트 핸들러 내부의 this는 전역 객체 window를 가리킨다.

5.2 이벤트 핸들러 프로퍼티 방식

이벤트 핸들러 프로퍼티 방식에서 이벤트 핸들러는 메소드이므로 이벤트 핸들러 내부의 this는 이벤트에 바인딩된 요소를 가리킨다. 이것은 이벤트 객체의 currentTarget 프로퍼티와 같다.

5.3 addEventListener 메소드 방식

addEventListener 메소드에서 지정한 이벤트 핸들러는 콜백 함수이지만 이벤트 핸들러 내부의 this는 이벤트 리스너에 바인딩된 요소(currentTarget)를 가리킨다. 이것은 이벤트 객체의 currentTarget 프로퍼티와 같다.

6. 이벤트의 흐름

계층적 구조에 포함되어 있는 HTML 요소에 이벤트가 발생할 경우 연쇄적 반응이 일어난다. 즉, 이벤트가 전파(Event Propagation)되는데 전파 방향에 따라 버블링(Event Bubbling)과 캡처링(Event Capturing)으로 구분할 수 있다.

자식 요소에서 발생한 이벤트가 부모 요소로 전파되는 것을 버블링이라 하고, 자식 요소에서 발생한 이벤트가 부모 요소부터 시작하여 이벤트를 발생시킨 자식 요소까지 도달하는 것을 캡처링이라 한다. 주의할 것은 버블링과 캡처링은 둘 중에 하나만 발생하는 것이 아니라 캡처링부터 시작하여 버블링으로 종료한다는 것이다. 즉, 이벤트가 발생했을 때 캡처링과 버블링은 순차적으로 발생한다.

캡처링은 IE8 이하에서 지원되지 않는다.

www.w3.org/TR/DOM-Level-3-Events

addEventListener 메소드의 세번째 매개변수에 true를 설정하면 캡처링으로 전파되는 이벤트를 캐치하고 false 또는 미설정하면 버블링으로 전파되는 이벤트를 캐치한다.

body

top

middle

bottom

좀 더 자세히 살펴보자. 먼저 버블링의 경우 어떻게 동작하는지 알아본다.

버블링 이벤트

위 코드는 모든 이벤트 핸들러가 이벤트 흐름을 버블링만 캐치한다. 즉, 캡쳐링 이벤트 흐름에 대해서는 동작하지 않는다. 따라서 button에서 이벤트가 발생하면 모든 이벤트 핸들러는 버블링에 대해 동작하여 아래와 같이 로그된다.

Handler for button. Handler for paragraph. Handler for body.

만약 p 요소에서 이벤트가 발생한다면 p 요소와 body 요소의 이벤트 핸들러는 버블링에 대해 동작하여 아래와 같이 로그된다.

Handler for paragraph. Handler for body.

캡처링의 경우 어떻게 동작하는지 살펴보자.

캡처링 이벤트

위 코드는 모든 이벤트 핸들러가 이벤트 흐름을 캡처링만 캐치한다. 즉, 버블링 이벤트 흐름에 대해서는 동작하지 않는다. 따라서 button에서 이벤트가 발생하면 모든 이벤트 핸들러는 캡처링에 대해 동작하여 아래와 같이 로그된다.

Handler for body. Handler for paragraph. Handler for button.

만약 p 요소에서 이벤트가 발생한다면 p 요소와 body 요소의 이벤트 핸들러는 캡처링에 대해 동작하여 아래와 같이 로그된다.

Handler for body. Handler for paragraph.

다음은 캡처링과 버블링이 혼용되는 경우이다.

버블링과 캡처링 이벤트

위 코드의 경우, body, button 요소는 버블링 이벤트 흐름만을 캐치하고 p 요소는 캡처링 이벤트 흐름만을 캐치한다. 따라서 button에서 이벤트가 발생하면 먼저 캡처링이 발생하므로 p 요소의 이벤트 핸들러가 동작하고, 그후 버블링이 발생하여 button, body 요소의 이벤트 핸들러가 동작한다.

Handler for paragraph. Handler for button. Handler for body.

만약 p 요소에서 이벤트가 발생한다면 캡처링에 대해 p 요소의 이벤트 핸들러가 동작하고 버블링에 대해 body 요소의 이벤트 핸들러가 동작한다.

Handler for paragraph. Handler for body.

7. Event 객체

event 객체는 이벤트를 발생시킨 요소와 발생한 이벤트에 대한 유용한 정보를 제공한다. 이벤트가 발생하면 event 객체는 동적으로 생성되며 이벤트를 처리할 수 있는 이벤트 핸들러에 인자로 전달된다.

클릭하세요. 클릭한 곳의 좌표가 표시됩니다.

위와 같이 event 객체는 이벤트 핸들러에 암묵적으로 전달된다. 그러나 이벤트 핸들러를 선언할 때, event 객체를 전달받을 첫번째 매개변수를 명시적으로 선언하여야 한다. 예제에서 e라는 이름으로 매개변수를 지정하였으나 다른 매개변수 이름을 사용하여도 상관없다.

7.1 Event Property

7.1.1 Event.target

실제로 이벤트를 발생시킨 요소를 가리킨다. 아래 예제를 살펴보자.

hide 함수를 특정 노드에 한정하여 사용하지 않고 범용적으로 사용하기 위해 event 객체의 target 프로퍼티를 사용하였다. 위 예제의 경우, hide 함수 내부의 e.target은 언제나 이벤트가 바인딩된 요소를 가리키는 this와 일치한다. 하지만 버튼별로 이벤트를 바인딩하고 있기 때문에 버튼이 많은 경우 위 방법은 바람직하지 않아 보인다.

이벤트 위임을 사용하여 위 예제를 수정하여 보자.

위 예제의 경우, this는 이벤트에 바인딩된 DOM 요소(.container)를 가리킨다. 따라서 container 요소를 감춘다. e.target은 실제로 이벤트를 발생시킨 DOM 요소(button 요소 또는 .container 요소)를 가리킨다. Event.target은 this와 반드시 일치하지는 않는다.

7.1.2 Event.currentTarget

이벤트에 바인딩된 DOM 요소를 가리킨다. 즉, addEventListener 앞에 기술된 객체를 가리킨다.

addEventListener 메소드에서 지정한 이벤트 핸들러 내부의 this는 이벤트에 바인딩된 DOM 요소를 가리키며 이것은 이벤트 객체의 currentTarget 프로퍼티와 같다. 따라서 이벤트 핸들러 함수 내에서 currentTarget과 this는 언제나 일치한다.

7.1.3 Event.type

발생한 이벤트의 종류를 나타내는 문자열을 반환한다.

키를 입력하세요

7.1.4 Event.cancelable

요소의 기본 동작을 취소시킬 수 있는지 여부(true/false)를 나타낸다.

Go to poiemaweb.com

7.1.5 Event.eventPhase

이벤트 흐름(event flow) 상에서 어느 단계(event phase)에 있는지를 반환한다.

반환값 의미 0 이벤트 없음 1 캡쳐링 단계 2 타깃 3 버블링 단계

8. Event Delegation (이벤트 위임)

우선 아래 예제를 살펴보자.

  • Item 1
  • Item 2
  • Item 3
  • Item 4
  • Item 5
  • Item 6

모든 li 요소가 클릭 이벤트에 반응하는 처리를 구현하고 싶은 경우, li 요소에 이벤트 핸들러를 바인딩하면 총 6개의 이벤트 핸들러를 바인딩하여야 한다.

function printId() { console.log(this.id); } document.querySelector('#post-1').addEventListener('click', printId); document.querySelector('#post-2').addEventListener('click', printId); document.querySelector('#post-3').addEventListener('click', printId); document.querySelector('#post-4').addEventListener('click', printId); document.querySelector('#post-5').addEventListener('click', printId); document.querySelector('#post-6').addEventListener('click', printId);

만일 li 요소가 100개라면 100개의 이벤트 핸들러를 바인딩하여야 한다. 이는 실행 속도 저하의 원인이 될 뿐 아니라 코드 또한 매우 길어지며 작성 또한 불편하다.

그리고 동적으로 li 요소가 추가되는 경우, 아직 추가되지 않은 요소는 DOM에 존재하지 않으므로 이벤트 핸들러를 바인딩할 수 없다. 이러한 경우 이벤트 위임을 사용한다.

이벤트 위임(Event Delegation)은 다수의 자식 요소에 각각 이벤트 핸들러를 바인딩하는 대신 하나의 부모 요소에 이벤트 핸들러를 바인딩하는 방법이다. 위의 경우 6개의 자식 요소에 각각 이벤트 핸들러를 바인딩하는 것 대신 부모 요소(ul#post-list)에 이벤트 핸들러를 바인딩하는 것이다.

또한 DOM 트리에 새로운 li 요소를 추가하더라도 이벤트 처리는 부모 요소인 ul 요소에 위임되었기 때문에 새로운 요소에 이벤트를 핸들러를 다시 바인딩할 필요가 없다.

이는 이벤트가 이벤트 흐름에 의해 이벤트를 발생시킨 요소의 부모 요소에도 영향(버블링)을 미치기 때문에 가능한 것이다.

실제로 이벤트를 발생시킨 요소를 알아내기 위해서는 Event.target 을 사용한다.

  • Item 1
  • Item 2
  • Item 3
  • Item 4
  • Item 5
  • Item 6

9. 기본 동작의 변경

이벤트 객체는 요소의 기본 동작과 요소의 부모 요소들이 이벤트에 대응하는 방법을 변경하기 위한 메소드는 가지고 있다.

9.1 Event.preventDefault()

폼을 submit하거나 링크를 클릭하면 다른 페이지로 이동하게 된다. 이와 같이 요소가 가지고 있는 기본 동작을 중단시키기 위한 메소드가 preventDefault()이다.

go

9.2 Event.stopPropagation()

어느 한 요소를 이용하여 이벤트를 처리한 후 이벤트가 부모 요소로 이벤트가 전파되는 것을 중단시키기 위한 메소드이다. 부모 요소에 동일한 이벤트에 대한 다른 핸들러가 지정되어 있을 경우 사용된다.

아래 코드를 보면, 부모 요소와 자식 요소에 모두 mousedown 이벤트에 대한 핸들러가 지정되어 있다. 하지만 부모 요소와 자식 요소의 이벤트를 각각 별도로 처리하기 위해 button 요소의 이벤트의 전파(버블링)를 중단시키기 위해서는 stopPropagation 메소드를 사용하여 이벤트 전파를 중단할 필요가 있다.

버튼을 클릭하면 이벤트 전파를 중단한다.

9.3 preventDefault & stopPropagation

기본 동작의 중단과 버블링 또는 캡처링의 중단을 동시에 실시하는 방법은 아래와 같다.

return false;

단 이 방법은 jQuery를 사용할 때와 아래와 같이 사용할 때만 적용된다.

go

go

이 방법은 기본 동작의 중단과 이벤트 흐름의 중단 모두 적용되므로 이 두가지 중 하나만 중단하기 원하는 경우는 preventDefault() 또는 stopPropagation() 메소드를 개별적으로 사용한다.

Reference

키워드에 대한 정보 자바 스크립트 이벤트 감지

다음은 Bing에서 자바 스크립트 이벤트 감지 주제에 대한 검색 결과입니다. 필요한 경우 더 읽을 수 있습니다.

이 기사는 인터넷의 다양한 출처에서 편집되었습니다. 이 기사가 유용했기를 바랍니다. 이 기사가 유용하다고 생각되면 공유하십시오. 매우 감사합니다!

사람들이 주제에 대해 자주 검색하는 키워드 JavaScript에서 \"(e)\"는 무엇을 의미합니까? - 이벤트 핸들러 객체 설명

  • js events tutoria;
  • javascript events
  • how to use javascript events
  • javascript mousedown event
  • javascript mouseup event
  • javascript click event
  • javascript double click event
  • javascript button click event
  • javascript event handlers
  • what are javascript events
  • what are javascript event handlers
  • what are event listeners in javascript
  • addEventListener tutorial
  • javascript location of mouse
  • event target javascript

JavaScript에서 #\"(e)\"는 #무엇을 #의미합니까? #- #이벤트 #핸들러 #객체 #설명


YouTube에서 자바 스크립트 이벤트 감지 주제의 다른 동영상 보기

주제에 대한 기사를 시청해 주셔서 감사합니다 JavaScript에서 \"(e)\"는 무엇을 의미합니까? - 이벤트 핸들러 객체 설명 | 자바 스크립트 이벤트 감지, 이 기사가 유용하다고 생각되면 공유하십시오, 매우 감사합니다.

Leave a Comment