본문 바로가기
WEB/JavaScript

이벤트 : 등록방법

by 노랑파랑 2016. 10. 16.
반응형




1. inline

이벤트를 이벤트 대상의 태그 속성으로 지정하는 것이다.

<input type="button" value="Inline" onclick="alert('Event > Inline');"/>

* 이벤트의 소재를 파악하기 용이하다.

* 정보인 HTML과 제어인 JavaScript가 혼재되어 좋은 방식은 아니다.


☆ 이벤트가 발생한 대상을 원하는 경우 this를 이용해 참조할 수 있다. 

- 자기 자신을 참조

<input type="button" id="target" onclick="alert('Hello world, '+document.getElementById('target').value);" value="button" />

- this를 이용해 참조
<input type="button" onclick="alert('Hello world, '+this.value);" value="button" />





2. Property Listener

* 이벤트 대상에 해당하는 객체의 프로퍼티로 이벤트를 등록한다.

* HTML과 JavaScript를 분리한다.

<input type="button" id="button" value="button" /> <script> var t = document.getElementById('button'); t.onclick = function(){        // 프로퍼티 리스너 alert('Hello world'); } </script>


☆ 이벤트가 실행된 맥락의 정보가 필요할 때 이벤트 객체를 이용한다. 이는 이벤트가 실행될 때 이벤트 핸들러의 인자로 전달된다.

<body> <input type="button" id="btn" value="button" /> <script> var t = document.getElementById('btn'); t.onclick = function(event){ alert('Hello !--->'+event.target.value) }


★ IE8 이하 버전에서는 이벤트 객체가 핸들러의 인자가 아니라 전역객체의 event 프로퍼티로 제공한다. target 프로퍼티도 존대하지 않는다.

이를 위해 IE8 이하 버전까지 호환되도록 코드를 조정한다.

<input type="button" id="btn" value="button" /> <script> var t = document.getElementById('btn'); t.onclick = function(event){ var event = event || window.event;    //event 또는 window.event var target = event.target || event.srcElement;    //target 프로퍼티 또는 srcElement alert('Hello !--->, '+target.value) } </script>





3. addEventListener()

* 이벤트를 등록하는 가장 권장되는 방법

* 여러개의 이벤트 핸들러를 등록할 수 있다. 


 - 기본 방식

<input type="button" id="btn" value="button" />
<script>
    var t = document.getElementById('btn');
    t.addEventListener('click', function(event){
        alert('Hello !--->, '+event.target.value);
    });
</script>


- IE8 이하 버전 호환 코드

<input type="button" id="btn" value="button" />
<script>
var t = document.getElementById('btn');
if(t.addEventListener){
    t.addEventListener('click', function(event){
        alert('Hello !--->, '+event.target.value);
    }); 
} else if(t.attachEvent){
    t.attachEvent('onclick', function(event){
        alert('Hello !--->, '+event.target.value);
    })
}
</script>


- 하나의 이벤트 대상 : 복수의 동일 이벤트 리스너

<input type="button" id="btn" value="button" /> <script> var t = document.getElementById('btn');    // 이벤트 대상 1 t.addEventListener('click', function(event){    // 이벤트 리스너 1 alert(1); }); t.addEventListener('click', function(event){    // 이벤트 리스너 2 alert(2); }); </script>


- 복수의 이벤트 대상 : 하나의 이벤트 리스너

  
<input type="button" id="btn1" value="버튼 1" />
<input type="button" id="btn2" value="버튼 2" />

<script>
var t1 = document.getElementById('btn1');
var t2 = document.getElementById('btn2');

      function btn_listener(event){   // 버튼 별 이벤트 핸들러
        switch(event.target.id){
            case 'btn1':
                alert(1);
                break;
            case 'btn2':
                alert(2);
                break;
        }
    }
    t1.addEventListener('click', btn_listener);
    t2.addEventListener('click', btn_listener);
</script>


반응형

'WEB > JavaScript' 카테고리의 다른 글

이벤트 : 기본 이벤트 취소  (0) 2016.10.17
이벤트 : 전파  (0) 2016.10.16
이벤트  (0) 2016.10.16
요소의 위치와 크기  (0) 2016.10.16
Text 객체 : 조작 API  (0) 2016.10.16