JavaScript/4. 이벤트 기초 및 활용

Day 47 : 이벤트 객체

pancakemaker 2021. 12. 22. 16:00

1. 이벤트 객체

: 이벤트가 발생하면, 브라우저는 발생한 이벤트에 관련된 다양한 정보를 담은 이벤트 객체를 만들어 이벤트 리스너에 전달

: 이벤트가 처리되고 나면 이벤트 객체는 소멸됨


2. 이벤트 객체 전달받기

① 이름을 가진 이벤트 리스너 함수

function f(e) {		//매개변수 e에 이벤트 객체를 전달받음. e는 생략 가능
...
}
obj.onclick = f;	//obj 객체의 onclick 리스너로 함수 f 등록

 

② 익명 함수의 경우

obj.onclick = function(e) {		//매개변수 e에 이벤트 객체 전달받음. e는 생략 가능
...
}

 

③ HTML 태그의 리스너 경우

function f(e) {		//매개변수 e로 event 객체를 전달받음
...
}
...
<button onclick="f(event)">버튼</button>
<div onclick=alert(event.type)">버튼</div>

 

<예시>

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<meta name="viewport" content="width=device-width, initial-scale=1.0">
	<title>이벤트 객체 전달받기</title>
</head>
<body>
	<p id="p">마우스를 올려보세요</p>
	<button onclick="f(event)">클릭하세요</button>
	<script>
		function f(e) {		//e는 현재 발생한 이벤트 객체
			alert(e.type);	//이벤트 종류 출력
		}
		document.getElementById("p").onmouseover=f;
	</script>
</body>
</html>


3. 이벤트 객체에 들어 있는 정보

- 이벤트 타겟 : 이벤트를 유발시킨 태그(객체)

- type 프로퍼티 : 현재 발생한 이벤트의 종류를 나타내는 문자열 (click, load 등)

- target 프로퍼티 : 이벤트 타겟 객체

- currentTarget 프로퍼티 : 현재 이벤트 리스너를 실행하고 있는 DOM 객체

- defaultPrevented 프로퍼티 : 이벤트의 디폴트 행동이 취소되었는지를 나타내는 true/false 값

- preventDefault() 메소드 : 이벤트의 디폴트 행동을 취소시키는 메소드

 

<예시>

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<meta name="viewport" content="width=device-width, initial-scale=1.0">
	<title>이벤트 객체 프로퍼티</title>
</head>
<body>
	<h3>이벤트 객체의 프로퍼티 출력</h3>
	<hr>
	<p id="p">버튼을 클릭하면 이벤트 객체를 출력합니다.</p>
	<button onclick="f(event)">클릭하세요</button>
	<script>
		function f(e) {
			var text = "type: " + e.type + "<br>" 
				+ "target: " + e.target + "<br>"
				+ "currentTarget: " + e.currentTarget + "<br>"
				+ "defaultPrevented: " + e.defaultPrevented;

			var p = document.getElementById("p");
			p.innerHTML=text;	//이벤트 객체의 프로퍼티 출력
		}
	</script>
</body>
</html>


4. 이벤트의 디폴트 행동 취소 : preventDefault()

- 디폴트 행동 : <a> 태그를 클릭하면 웹 페이지를 로드하는 것이나, submit 버튼을 클릭하면 폼 데이터를 웹 서버로 전송하는 것이나, reset 버튼을 클릭하면 폼을 초기화하는 등의 정해진 행동

<a href="http://www.naver.com" onclick="return false">이동 안되는 링크</a>
<input type="checkbox" onclick="return false">체크 안되는 체크 박스
<a href="http://www.naver.com" onclick="event.preventDefault()">이동 안되는 링크</a>

 

<예시>

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<meta name="viewport" content="width=device-width, initial-scale=1.0">
	<title>이벤트 디폴트 행동 취소</title>
	<script>
		function query() {
			var ret = confirm("네이버로 이동하시겠습니까?");
			return ret;		//confirm()의 리턴 값은 true or false
		}
		function noAction(e) {
			e.preventDefault();
		}
	</script>
</head>
<body>
	<h3>이벤트 디폴트 행동 취소</h3>
	<hr>
	<a href="http://www.naver.com" onclick="return query()">네이버로 이동할 지 물어보는 링크</a>
	<hr>
	<form>
		<input type="checkbox">빵(체크 됨)<br>
		<input type="checkbox" onclick="noAction(event)">술(체크 안됨)
	</form>
</body>
</html>