티스토리 뷰

 [javascript 15강] 이벤트



이번글에서는 javascript 이벤트에 대해서 알아볼것입니다.

우선 이벤트란 마우스, 키보드, 버튼, 양식전송, 페이지로드, 포커스 등등

뭔가가 이루어지는것을 이벤트라고 합니다.

즉, javascript 의 장점인 동적인 페이지를 만들기위해 이벤트를 컨트롤 할수 있습니다.

이벤트의 형식은 다음과 같습니다.

이벤트속성, 이벤트 이름, 이벤트 연결, 이벤트 핸들러로 이루어져있습니다.

(용어를 잘알고 있어야합니다.. 그래야 나중에 구글링이라도 가능하기에.. 용어는 중요합니다.)

이렇게 이루어진 이벤트는 이벤트모델로 또 4가지로 나뉘어집니다.

크게는 2가지로 DOM level 0, DOM level 2 로 나뉘고..

2가지로 나뉜 모델에서 또 4가지로 나뉩니다.

인라인 모델, 기본 모델, MS핸드러 모델, 표준핸들러 모델 입니다.

모델이란 쉽게 말해 문법이라고 생각하시면 됩니다.

문법은 모두 다르지만.. 결과값은 모두 같습니다.

혼자 개발을 할때는 아무 모델이나 사용해도 됩니다.

하지만... 

현업에서는 정해진 모델로 사용하며 4가지 모델에서 

기본모델 및 표준 핸들러 모델을 많이 사용합니다.

그렇다고 2가지 모델만 공부를 하시면 안됩니다.

그 이유는..

만약 이직을 하거나 파견을 나가서 업무를 하려고 할때 다른 모델로 이미 개발이 되어있다면..

결국 또다시 찾아서 공부해야할것입니다..

그렇기에 이번글에서 4가지 모델을 하나씩 살펴보도록 하겠습니다.


이벤트내용에 들어가긴 이전글을 링크로 달아두었습니다.

모르는 부분이 있으시다면 들어가서 확인부탁드립니다.


 이전 글 링크 



 인라인 모델


인라인 모델은 스크립크와 HTML 태그의 속성을 사용하여 이벤트를 컨트롤 하는것입니다.

인라인 모델은 사용하기가 편하지만..

javascript 와 html 문서가 섞여 스파게티소스가 되어버립니다.

그래서 잘 사용하지 않습니다.

(HTML 문서를 변경하면 오류가날 확율이높고.. 사용하지 않는 javascript 소스가 남을수 있습니다..)


 사용방법 및 문법 


스크립트 영역에 함수를 생성후

HTML 태그에 속성으로 달아줍니다.


<div 이벤트속성="생성한 함수();"></div>


또는 


<div 이벤트속성="자바스크립트 직접입력"></div>



 예제 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Insert title here</title>
        <script type="text/javascript">
            function divClick(ob){
                ob.style.backgroundColor = "green";
            }
        </script>
    </head>
    <body>
        <div style="width: 100px; height: 100px; background-color: black;" onclick="divClick(this);"></div>
    </body>
</html>
cs


 실행결과 및 설명 

 


처음 화면에서는 검은색 div 출력됩니다.

검은색 div 를 클릭하면..



이렇게 초록색 div로 바뀌게 됩니다.

그럼 코드를 리뷰해 보겠습니다.


<div style="width: 100px; height: 100px; background-color: black;" onclick="divClick(this);"></div>

위와같은 스타일을 가진 div 안에 onclick (클릭이 일어나면 실행) 이라는 속성을 넣어주고..

함수 divClick 을 넣어준후에 매개변수 this 를 넘겨주었습니다.

즉, 한번클릭하면 divClick 함수가 실행되고..

this인 div 객체를 함수에 매개변수로 넘겨줍니다. 


           function divClick(ob){
                ob.style.backgroundColor = "green";
            }

스크립트 영역에 divClick 이라는 함수를 만들어주었고.. 매개변수 ob 를 받게 하였습니다.

ob.style.backgroundColor = "green";

매개변수로 받은 ob는 div 객체입니다.

그다음 style.backgroundColor 속성을 사용하여 색상을 "green" 이라고 넣어주었습니다.

(이전 강의 BOM 에서 배운내용 활용)

그결과 위와같이 검정색에서 초록색으로 변했습니다.




 기본모델


많이 쓰이는 방식으로 스크립트에 이벤트를 기술하여 적용합니다.

장점은 자바스크립트, HTML 모두 분리 되어있습니다.


 사용방법 및 문법 


스크립트 영역에 클릭이벤트를 기술합니다.


태그객체.onclick = function(){

this.style.backgroundColor = "green";

}


태그객체는 document.getElementById("아이디") 로 변수로 할당하여 사용하여도 되며..

document.getElementById("아이디").onclick 으로 바로 정의하여도 됩니다.



 예제 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Insert title here</title>
        <script type="text/javascript">
            
            window.onload = function(){
                document.getElementById("firstDiv").onclick = function(){
                    this.style.backgroundColor = "green";
                }    
            }
        
            
        </script>
    </head>
    <body>
        <div id="firstDiv" style="width: 100px; height: 100px; background-color: black;" ></div>
    </body>
</html>
cs


 실행결과 및 설명 

 


처음 화면에서는 검은색 div 출력됩니다.

검은색 div 를 클릭하면..



이렇게 초록색 div로 바뀌게 됩니다.

그럼 코드를 리뷰해 보겠습니다.


<div id="firstDiv" style="width: 100px; height: 100px; background-color: black;" ></div>

HTML 구문에 아이디가 firstDiv 인 div 태그를 만들어 주었습니다.


           window.onload = function(){
                document.getElementById("firstDiv").onclick = function(){
                    this.style.backgroundColor = "green";
                }    
            }

다음 스크립트영역에 onload 를 사용하여 모두다 로드된후에..

getElementById 함수를 사용하여 아이디가 firstDiv 인 div 객체를 잡은후에 onclick 이벤트롤 바로 정의하였습니다.

this 키워드를 사용하여 style 영역에서 backgroundColor 색상을 초록색상으로 변경하였습니다.

그결과 위와같이 색상이 변하는것을 확인할수 있습니다.




 표준 핸들러 모델


기본모델과 같이 많이쓰이는 방식입니다.


 사용방법 및 문법 


1. 핸들러 추가


태그객체.addEventListener("이벤트",만든 함수, 버블링 캡처링 여부);


2. 핸들러 삭제


태그객체.removeEventListener("이벤트",만든 함수, 버블링 캡처링 여부);


(버블링은 이벤트가 발생시 상위요소로 올라가는것이고.. 캡처링은 이벤트가 발생시 하위요소로 내려가는것입니다.)



 예제 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Insert title here</title>
        <script type="text/javascript">
            
            window.onload = function(){
                var divob = document.getElementById("firstDiv");
                divob.addEventListener("click", clickEvent, false);
                
                function clickEvent(){
                    divob.style.backgroundColor = "green";
                }
                
            }
        </script>
    </head>
    <body>
        <div id="firstDiv" style="width: 100px; height: 100px; background-color: black;" ></div>
    </body>
</html>
cs


 실행결과 및 설명 

 


처음 화면에서는 검은색 div 출력됩니다.

검은색 div 를 클릭하면..



이렇게 초록색 div로 바뀌게 됩니다.

그럼 코드를 리뷰해 보겠습니다.


<div id="firstDiv" style="width: 100px; height: 100px; background-color: black;" ></div>

HTML 구문에 아이디가 firstDiv 인 div 태그를 만들어 주었습니다.


           window.onload = function(){
                var divob = document.getElementById("firstDiv");
                divob.addEventListener("click", clickEvent, false);
                
                function clickEvent(){
                    divob.style.backgroundColor = "green";
                }
                
            }

다음 스크립트 영역에서 onload 로 모두 로드된후에 

divod 변수에 firstDiv 의 아이디를 갖고있는 div 객체를 할당해주었습니다.

다음 변수 divod 에 addEventListener 함수를 사용하여 click 이벤트가 일어날때 clickEvent 함수를 실행하도록 하였고..

clickEvent 라는 함수를 만들고 함수에서는 divod 변수의 할당된 객체에 스타일 속성으로 들어가 배경색상을 바꿔주었습니다.

그결과 위와같은 결과를 얻을수 있습니다.




 MS 핸들러 모델


표준 핸들러와 비슷하나..

익스플로러 8 버전 밑에서만 작동을 하고..

즉.. html5 도 아니라는 소립니다.

2019년 시대에서는 좀처럼 보기 힘듭니다..

많이 사용하지는 않습니다.


 사용방법 및 문법 


1. 핸들러 추가


태그객체.attachEvent("이벤트",만든 함수, 버블링 캡처링 여부);


2. 핸들러 삭제


태그객체.detachEvent("이벤트",만든 함수, 버블링 캡처링 여부);


(버블링은 이벤트가 발생시 상위요소로 올라가는것이고.. 캡처링은 이벤트가 발생시 하위요소로 내려가는것입니다.)



 예제 

-표준 핸들러와 크게 다르지 않아 생략합니다-


 실행결과 및 설명 

 -표준 핸들러와 크게 다르지 않아 생략합니다-



 이벤트 객체


addEventListener 함수를 사용하여 이벤트가 일어나면 내가 만들어 놓은 함수를 사용할수 있으며 매개변수를 넘길수가 없죠.

하지만...  이벤트가 일어난 곳의 객체가 내가 만들어둔 함수로 넘어가 사용할수가 있습니다.

즉 이벤트가 일어난 객체를 맘대로 사용할수가 있습니다.

사용방법은 생략하며 바로 예제로 들어가겠습니다.


 예제 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Insert title here</title>
        <script type="text/javascript">
            
            window.onload = function(){
                
                document.getElementById("firstDiv").addEventListener("click", clickEvent, false);
                document.getElementById("endDiv").addEventListener("click", clickEvent, false);
                
                function clickEvent(){
                    this.style.backgroundColor = "green";
                }
                
            }
        
        </script>
    </head>
    <body>
        <div id="firstDiv" style="width: 100px; height: 100px; background-color: black; margin-bottom: 30px;" ></div>
        <div id="endDiv" style="width: 100px; height: 100px; background-color: black;" ></div>
    </body>
</html>
cs


 실행결과 및 설명 

 

처음나온 화면입니다.


위의 div 를 클릭하면 색이변합니다.


두번째 div 를 클릭하면 색이 변합니다.

즉 this 키워드로 각각 적용되는것을 확인할수 있습니다.

그럼 코드를 리뷰해 보겠습니다.


       <div id="firstDiv" style="width: 100px; height: 100px; background-color: black; margin-bottom: 30px;" ></div>
        <div id="endDiv" style="width: 100px; height: 100px; background-color: black;" ></div>

두개의 div 를 만들어 주었습니다.


           window.onload = function(){
                
                document.getElementById("firstDiv").addEventListener("click", clickEvent, false);
                document.getElementById("endDiv").addEventListener("click", clickEvent, false);
                
                function clickEvent(){
                    this.style.backgroundColor = "green";
                }
                
            }

그다음 onload 를 사용하여 모두 로딩이 된후에..

firstDiv 에 addEventListner 사용하여 click 이벤트가 일어날때 함수 clickEvent 가 실행되도록 하였고..

endDiv 에도 addEventListner 사용하여 click 이벤트가 일어날때 함수 clickEvent 가 실행되도록 하였습니다.

다음 clickEvent 함수에서 this 키워드를 사용하여 이벤트가 일어나는 객체의 백그라운드 색상을 변화시켜주었습니다.

그결과 위와같은 결과를 얻을수 있습니다.




 글을 마치며..


이벤글에서는 이벤트에 대해서 알아보았습니다.

이벤글은 매우 중요하다고 생각합니다.

협업을 할때 각자 코딩 스타일이 다르기에 모두알고 넘어가셧으면 좋겠습니다.

모두 수고하세요!


도움이 되셨다면 로그인 없이 가능한

아래 하트♥공감 버튼을 꾹 눌러주세요! 




댓글