자바스크립트 이벤트 - DOM Lelvel 2 Event Model




DOM Lelvel 2 이벤트 모델은 Level 1 이벤트 모델의 최대 단점이었던 이벤트 타입당 복수 핸들러 할당이 가능한 이벤트 설계 모델입니다.

즉, 해당 엘리먼트의 이벤트 타입당 하나 이상의 핸들러 할당이 가능합니다.




이벤트 할당 방법은 아래 코드와 같습니다.

  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
  2. <HTML>
  3. <HEAD>
  4. <TITLE> New Document </TITLE>
  5. <META NAME="Generator" CONTENT="EditPlus">
  6. <META NAME="Author" CONTENT="">
  7. <META NAME="Keywords" CONTENT="">
  8. <META NAME="Description" CONTENT="">
  9. <script>
  10.  
  11.  
  12. // DOM LEVEL 2 Event Model 처리 함수
  13. function bind(elem, type, handler, capture)
  14. {
  15.  
  16.     type = typeof type === 'string' && type || '';
  17.     handler = handler || function(){ ; };
  18.    
  19.     if (elem.addEventListener){
  20.         elem.addEventListener(type, handler, capture);
  21.     }
  22.     else if (elem.attachEvent){
  23.         elem.attachEvent('on' + type, handler);
  24.     }
  25.  
  26.     return elem;
  27. };
  28.  
  29. // 동일 엘리먼트의 동일 이벤트 타입에 복수 이벤트 할당
  30. var cnt = 0;
  31. bind(window, 'load', function(){
  32.  
  33.     bind(document.getElementById('test_object1'), 'click', function(e){
  34.                
  35.             alert(cnt++); // 0
  36.     }, false);
  37.  
  38.     bind(document.getElementById('test_object1'), 'click', function(e){
  39.                
  40.             alert(cnt++); // 1
  41.  
  42.     }, false);
  43.  
  44.  
  45. }, false);
  46.  
  47. </script>
  48.  
  49.  
  50. </HEAD>
  51. <BODY>
  52. <div id="test_object1">CLICK!!!</div>
  53. </BODY>
  54. </HTML>

위 소스는 Dom Level 2 이벤트 모델의 메서드로 작성된 소스이며, test_object1 엘리먼트의 클릭 이벤트 호출 시 전역 cnt 변수의 증감값을 대화창으로 노출시키도록 하였습니다.