Day005 이벤트와 이벤트 핸들링
1 이벤트와 이벤트 종류
이벤트란?
웹 브라우저의 사용자가 마우스를 클릭하거나 마우스를 움직일 때 키를 입력하는 순간 등 사용자 행동의 발생을 자바스크립트 엔진 내부에 알리는 통지(notification)라고 정의 할 수 있습니다.
이벤트 핸들러란?
이벤트의 발생시 상응하는 작용을 하기 위해 작성된 자바스크립트 코드를 말합니다. 예를 들어 어떤 이미지 위에 마우스가 올라갔을 때 음악을 연주하고자 한다면 마우스가 이미지 뒤에 올라갔음을 알리는 mouseover 이벤트를 받아 이를 처리하기 위한 onmouseover 이벤트 핸들러 코드를 이미지 객체에 작성하여 음악 연주를 시작하도록 하면 됩니다.
이벤트 종류
익스플로러에서 지원되는 이벤트의 종류는 70남짓으로 이 각각의 이벤트 핸들러 이름은 이벤트 이름에 on을 붙인 것과 같습니다.
Anchor | anchors array | Applet! | applet!s array | Area | Array | Button | Checkbox | Date | document | FileUpload | Form | forms array | frames array | Hidden | History | history array | Image | images array | Layers | layers array | Link | links array | location | Math | MimeType | mimeTypes array | navigator | Number | Option | options array | Password | Plugin | plugins array | Radio | radio array | Reset | screen | Select | String | Submit | Text | Textarea | window | |||
※ 녹색은 네츠케이프, 혹은 익스플로러 전용으로만 사용되는 객체(속성,메소드)입니다 | |||
객체(Object) |
속성(Property) |
메소드(Method) |
이벤트핸들러(Event Handler) |
name |
|
| |
length |
|
| |
|
applet!'s methods |
| |
length |
|
| |
hash |
|
onClick | |
length |
concat |
| |
form |
blur |
onClick | |
checked |
blur |
onClick | |
|
getDate |
| |
activeElement |
clear |
| |
form |
blur |
onBlur! | |
action |
reset |
onReset | |
length |
|
| |
length |
|
| |
form |
|
| |
current |
back |
| |
length |
|
| |
border |
|
onAbort | |
length |
|
| |
above |
load |
onBlur! | |
length |
|
| |
hash |
|
onClick | |
length |
|
| |
hash |
reload |
| |
E |
abs |
| |
description |
|
| |
length |
|
| |
appCodeName |
javaEnabled |
| |
MAX_VALUE |
toString |
| |
defaultSelected |
|
| |
length |
|
| |
defaultValue |
blur |
onBlur! | |
description |
refresh |
| |
length |
|
| |
checked |
blur |
onClick | |
length |
|
| |
form |
blur |
onClick | |
availHeight |
|
| |
form |
blur |
onChange | |
length |
anchor |
| |
form |
blur |
onClick | |
defaultValue |
blur |
onBlur! | |
defaultValue |
blur |
onBlur! | |
clientInformation |
alert! |
onBlur! |
이벤트 처리의 특징
1. 이벤트는 이벤트를 받는 객체에서 처리됩니다.
발생한 이벤트는 이벤트 목적 객체에 우선 전달되어 처리 됩니다. 만일 어떤 버튼 객체를 사용자가 클릭 였다면 클릭 이벤트가 발생하게 되고 자바스크립트 엔진은 클릭 이벤트가 발생한 버튼 객체의 온클릭 핸들러를 호출할 것입니다. 즉, 현재 HTML 문서의 다른 객체들도 온클릭 핸들러를 가지고 있다 하더라도 이벤트가 발생한 목적 객체인 버튼 객체의 온클릭 핸들러가 호출됩니다.
2. 모든 객체가 모든 이벤트를 받을 수 없습니다.
모든 객체가 이벤트를 모두 받을 수 있는 것은 아닙니다. 객체마다 이벤트를 받을 수 있는 것과 없는 것으로 구분 됩니다.
이벤트 핸들러의 작성 방법
이벤트 핸들러를 작성하는 방법에는 크게 3 가지로 구분할 수 있습니다.
HTML 태그내에 이벤트 핸들러 코드를 작성 객체의 이벤트 핸들러 속성에 직접 코드를 대입 <script> 태그 직접 사용 |
HTML 태그내에 이벤트 핸들러 코드를 작성 <태그이름 이벤트 핸들러="자바스크립트 코드"> <body onload="alret('문서의 로딩이 완료되었습니다')"> <input type="button" onclick="document.bgColor='blue'"> 함수를 사용하여 호출할 수도 있다 <script> fuction f(){} </script> <input type = "button" onclick="f()"> |
객체의 이벤트 핸들러 속성에 직접 코드를 대입 <script> function docClick(){ alert("문서를 클릭하셨습니다"); } document.onclick = docClick; </script> |
<script> 태그 직접 사용 <태그 id="xxx"> .................................. <script for="xxx" event="이벤트 핸들러 이름" language="JScript"> .........이벤트를 처리할 자바 스크립트 코드.... </script> |
<a href=http://www.daum.net onclick="return false">이동할 수 없는 링크</a> 이벤트 핸들러가 false를 리턴하면 내부적으로 발생한 이벤트의 고유한 행위는 취소 된다. <a href=http://www.daum.net onclick="return f()">이동할 것인지 물어보는 태그</a> 물론 이 태그에서 f()는 구현이 되어 있는 함수이어야 한다. |
2. 이벤트 핸들링
onabort
이미지의 다운로드를 중지할 때 (브라우저의 중지버튼)
onactivate
개체가 활성화될 때 발생
(태그의 기능이 작용할 때 발생하는 이벤트로 예를 들어 링크를 누를 경우 링크가 옮겨질때 발생하는 것을 감지하는 이벤트 핸들러)
onafterprint
문서가 출력되거나 혹은 출력하기 위해 출력미리보기를 한 후에 발생
onafterupdate
데이터영역 개체에서 발생하는 이벤트로 데이터 소스 오브젝트내의 데이터가 업데이트 되었을 때 발생(데이터 개체부분 참조)
onbeforeactivate
개체가 활성화 상태로 되기 바로 직전에 발생 (onactivate 참고)
onbeforecopy
선택 영역이 시스템의 클립보드로 복사되기 바로 직전에 발생
onbeforecut
선택 영역이 지워지기 바로 직전에 발생
onbeforedeactivate
부모 문서에서 현재 개체에서 다른 개체로 activeElement가 바뀔 때 발생
(activeElement는 개체를 지칭하는 예약어로도 쓰임)
onbeforeeditfocus
편집가능한 개체 내부에 포함된 개체가 편집활성화된 상태가 되거나 혹은 편집가능한 개체가 제어를 위해 선택될 때
onbeforepaste
시스템의 클립보드에서 문서로 붙여넣기 될 때 대상 개체에서 발생
onbeforeprint
문서가 출력되거나 혹은 출력하기 위해 출력미리보기 직전에 발생
onbeforeunload
페이지가 언로드되기 직전에 발생
onbeforeupdate
데이터영역 개체에서 발생하는 이벤트로 데이터 소스 오브젝트내의 데이터가 업데이트 되기전에 발생 (데이터 개체부분 참조)
onblur
개체가 포커스를 잃었을 때
onbounce
마퀴태그에서 alernate상태에서 스크롤이 양 사이드에서 바운드될 때 발생
oncellchange
데이터 제공 개체에서 데이터가 변화할 때 발생
onchange
개체 혹은 선택영역의 내용이 바뀔 때 발생
onclick
개체위에서 마우스의 왼쪽 버튼을 누를 때 발생
oncontextmenu
클라이언트 영역에서 사용자가 마우스 오른쪽 버튼을 눌러 콘텍스트 메뉴를 열 때 발생
oncontrolselect
사용자가 개체의 제어 영역을 만들 때 발생
oncopy
시스템의 클립보드에 선택영역 혹은 개체를 복사할 때 소스 개체로부터 발생
oncut
시스템의 클립보드에 선택영역 혹은 개체를 잘라낼때 소스 개체로부터 발생
ondataavailable
비정기적으로 데이터를 전달하는 데이터 소스 개체로부터 데이터가 도착할 때마다 정기적으로 발생
ondatasetchanged
데이터 소스개체의 변화에 의해 데이터가 노출된 상태로 될 때 발생
ondatasetcomplete
데이터 소스 개체로부터 모든 데이터가 유용한 상태로 표시될 때 발생
ondblclick
사용자가 개체에 더블클릭 할때 발생
ondeactivate
모 문서에서 현재 개체에서 다른 개체로 activeElement가 변할 때 발생
ondrag
드래그 상태가 지속되는 동안 소스 객체로부터 발생
ondragend
드래그 상태가 끝날 때 소스 객체로부터 발생
ondragenter
사용자가 개체를 드래그하여 드롭가능 위치로 지정된 영역으로 이동할 때 타갯 개체에서 발생
ondragleave
사용자가 개체를 드래그하여 드롭가능 위치로 지정된 영역을 떠날 때 타갯 개체에서 발생
ondragover
사용자가 개체를 드래그하여 드롭가능 위치로 지정된 영역내에서 드래그할 때 계속적으로 타갯 개체에서 발생
ondragstart
선택된 개체 혹은 텍스트 영역에서 사용자가 드래그를 시작할 때 발생
ondrop
드래그앤드롭 작용에서 상태가 진행되는 동안 개체가 타갯 개체에 드롭되었을 때 타갯 개체에서 발생
onerror
개체가 로드되는 동안 발생하는 이벤트
on
3. 이벤트 버블(Event Bubble) 및 흐름 제어
이벤트는 대상 객체에 처음으로 발생하고 다시 객체의 계층 구조를 따라 window까지 위로 흘러간다. 예를 들어 div태그내에 p와 hr이 존재하는 HTML 문서가 출력된 웹브라우저상에서 사용자가 hr에 의해출력된 수평선 위에서 마우스를 클릭하면 hr 객체에 클릭 이벤트가 전달되고 다시 div객체로 클릭이 전달되며 그리고 나서 다시 document로 끝에 가서는 window에까지 도달된다. 이것이 이벤트가 흘러가는 경로이고 이벤트가 흘러가는 현상 자체를 이벤트 버블이라고 부른다.
모든 이벤트에 대해 이벤트 버블이 발생하는 것은 아니고 이벤트 버블은 강제로 막을 수도 있다.
event 객체에 프로퍼티 추가하여 버블현상 막기
event.cancelBubble= true; 결과값: |
4. event 객체
이벤트 객체는 이벤트가 발생할 때마다 현재 발생한 이벤트에 대한 다양한 정보를 제공하는 임시 객체입니다. 이벤트 객체는 현재 이벤트가 소멸되면 함께 소멸됩니다.
이벤트 객체가 가진 정보는 마우스의 클릭 위치, 입력된 키 값, 이벤트가 발생한 객체, 이벤트 타입 등 많은 정보가 있으며 지원하는 메소드는 없습니다.
'개발 Programming > HTML & JAVA SCRIPT' 카테고리의 다른 글
typeof() (0) | 2011.01.25 |
---|---|
Day006 폼 관련 객체들 (0) | 2009.07.30 |
Day003 DHTML (0) | 2009.07.29 |
Day002 자바스크립트의 객체 (0) | 2009.07.27 |
Day002 자바스크립트의 기본! (0) | 2009.07.27 |