• 검색 결과가 없습니다.

이벤트

N/A
N/A
Protected

Academic year: 2022

Share "이벤트"

Copied!
17
0
0

로드 중.... (전체 텍스트 보기)

전체 글

(1)

과목명: 웹프로그래밍응용

교재: 모던웹을 위한 JavaScript Jquery 입문, 한빛미디어

2014년 1학기

Professor Seung-Hoon Choi

Part1. JavaScript / Ch11. 이벤트

(2)

11 이벤트

이벤트

– 키보드 입력이나 마우스 클릭과 같이 다른 것에 영향을 미치는 사건

– 사용자가 발생시킬 수도 있고, 애플리케이션이 스스로 발생 시 킬 수도 있음

– 이벤트 종류

 마우스 이벤트, 키보드 이벤트

 HTML 프레임 이벤트, HTML 입력 양식 이벤트

 유저 인터페이스 이벤트

 구조 변화 이벤트

 터치 이벤트

(3)

11.1 이벤트 관련 용어 정리

예: window.onload = function( ) { }

– 이벤트 이름 (이벤트 타입)

 load

– 이벤트 속성

 onload

– 이벤트 리스너(이벤트 핸들러)

 이벤트 속성에 할당된 함수

코드 11-2

(4)

11.2 고전 이벤트 모델

고전 이벤트 모델

– 자바스크립트에서 문서 객체의 이벤트 속성으로 이벤트를 연 결하는 방법

– 코드 11-3, 11-4

 onclick 이벤트 속성에 이벤트 리스너 할당

– 코드 11-5

 문서 객체의 이벤트 속성에 null을 넣어줌으로써, 이벤트 리스너 를 제거함

고전 이벤트 모델은, 하나의 이벤트에 이벤트 리스너를 하나

연결할 수 있음

(5)

11.3 이벤트 발생 객체와 이벤트 객체

이벤트 발생 객체

– 이벤트를 발생시킨 객체를 의미함

– 이벤트 리스너에서 this를 사용하면, 이벤트 발생 객체를 알 수 있음

 코드 11-6

 코드 11-7

– 이벤트 리스너 내부에서 이벤트 발생 객체의 style을 변경함

(6)

11.3 이벤트 발생 객체와 이벤트 객체

이벤트 객체

– 발생한 이벤트에 대한 정보를 가지고 있는 객체

– 이벤트 리스너 정의 시 매개변수 e를 정의하면, e에 이벤트 객 체가 전달됨

코드 11-8

– 이벤트 리스너의 매개변수 e에 이벤트 객체가 전달됨

 document.getElementById(‘header’).onclick = function(e) { };

– 코드 설명: var event = e || window.event

 e가 존재하면 e를, e가 undefined이면 window.event를 event 변 수에 할당하라

 이 문장을 쓴 이유: 인터넷 익스플로러 8 이하 버전에서는 이벤트 객체가 window.event에 전달되었었기 때문.

(7)

11.4 이벤트 강제 실행

이벤트 속성이 이벤트 리스너를 할당하면,

– 이벤트 리스너는 함수 자료형이므로 – 이벤트 속성이 곧 함수가 된다.

코드 11-13

– 다음과 같이 buttonA 문서 객체에 이벤트 리스너를 할당하면

 buttonA.onclick = function( ) { }

– 다음과 같이 이벤트 속성을 함수처럼 호출할 수 있다.

 buttonA.onclick( );

(8)

11.5 인라인 이벤트 모델

인라인 이벤트 모델

– HTML 페이지의 가장 기본적인 이벤트 연결 방법

– 태그 안에 직접 이벤트 속성 및 이벤트 리스너를 정의함 – 형식

 이벤트 속성 = ‘자바스크립트 코드'

코드 11-16

– <h1 onclick = “alert(‘클릭’)”>Click</h1>

코드 11-17

– 여러 줄의 자바스크립트 코드도 가능함

 <h1 onclick="var alpha=10;alert(alpha);">Click</h1>

(9)

11.5 인라인 이벤트 모델

코드 11-18

– 여러 줄의 자바스크립트 코드 대신에 함수(이벤트 리스너)를 이용하면 좋다.

 <h1 onclick="whenClick(event)">Click</h1>

– 매개변수 event를 넣어서 호출해야, 이벤트 리스너에 이벤트 객체가 전달됨

(10)

11.6 디폴트 이벤트 제거

디폴트 이벤트

– 이벤트 리스너가 이미 정의되어 있는 이벤트 – 예: <a>

 클릭하면 다른 리소스(웹 페이지)로 이동함

디폴트 이벤트 제거

– false를 리턴하는 이벤트 리스너를 정의함 – 코드 11-20

 양식의 ‘submit’ 버튼을 클릭하면, 자동으로 입력 양식이 제출됨 (디폴트 이벤트)

 양식의 onsubmit 이벤트 속성에 false를 리턴하는 함수를 할당함 으로써, 디폴트 이벤트를 제거함

(11)

11.6 디폴트 이벤트 제거

코드 11-21

– 입력 양식의 유효성을 검사하는 이벤트 리스너를 정의함

 비밀번호 란과 비밀번호 확인 란의 값이 서로 같은지 검사

– 다르면 false를 return 함

(12)

11.7 이벤트 전달

이벤트 전달이란?

– 계층적 구조에 위치한 특정 엘리먼트에 이벤트가 발생한 경우 – 다른 엘리먼트로 그 이벤트가 전파되는 현상

– 예: 코드 11-23

 내부 <p>에 마우스 클릭 이벤트가 발생한 경우, 다른 엘리먼트로 이벤트가 전달된다.

(13)

11.7 이벤트 전달

이벤트 전달 방식

– 이벤트 버블링(bubbling)

 이벤트 발생 엘리먼트를 시작으로 최상위 엔리먼트까지 이벤트가 전달되는 방식

– 이벤트 캡처링(capturing)

 이벤트 발생 엘리먼트를 둘러싸는 최상위 엘리먼트를 시작으로 이벤트 발생 엘리먼트까지 이벤트가 전달되는 방식

 IE나 jQuery 등에서 지원하지 않음

(14)

11.7 이벤트 전달

이벤트 전달을 막아야 하는 경우가 있다.

– 예: 그림 11-9 미투데이 모바일

 사진기 아이콘을 마우스 클릭하는 경우,

– 상위 컨테이너로 이벤트 전달을 막아서, 댓글 화면이 보여지지 않음

이벤트 전달을 막는 방법

– 인터넷 익스플로러

 이벤트 객체의 cancelBubble 속성을 true로 변경함

– 그 이외의 브라우저

 이벤트 객체의 stopPropagation( ) 메소드를 사용함

– 예:

 코드 11-24, 코드 11-25

 코드 11-26 (이벤트 전달 제거)

(15)

11.8 인터넷 익스플로러의 이벤트 모델

인터넷 익스플로러의 이벤트 모델

– DOM Level 2 이벤트 모델 지원

 특정 이벤트 타입에 여러 개의 이벤트 핸들러를 할당할 수 있음

– 이벤트 핸들러 연결 메소드

 attachEvent(eventProperty, eventListener)

eventProperty 인자: 이벤트 속성 이름이 사용됨(예: ‘onclick’)

– 이벤트 핸들러 제거 메소드

 detachEvent(eventProperty, eventListener)

(16)

11.9 표준 이벤트 모델

표준 이벤트 모델

– W3C에서 공식으로 지정한 DOM Level 2 이벤트 모델

 특정 이벤트 타입에 여러 개의 이벤트 핸들러를 할당할 수 있음

– 이벤트 핸들러 연결 메소드

 addEventListener(eventName, handler, useCapture)

eventName 인자: 이벤트 이름이 사용됨(예: ‘click’) – useCapture 제공되지 않으면, 자동으로 false가 전달됨

– 이벤트 핸들러 제거 메소드

 removeEventListener(eventName, handler)

(17)

11.9 표준 이벤트 모델

코드 11-31

– 이벤트 핸들러 안에서의 this

 이벤트가 발생한 객체를 의미함

코드 11-32

– 이벤트 모델의 통합적 사용

 If( header.attachEvent ) { … } else { … }

참조

관련 문서