본문 바로가기

javascript/jQuery

5. jQuery Events

5. jQuery Events

 ■ jQuery API Events

 ο Page Load
   1) ready(handler)
      - 의미
        DOM 이 로드 되어 조작·해석이 가능하게 된 타이밍에 함수를 실행


 ο Event Handling
   1) bind(eventType, [eventData], handler(eventObject))
      - 의미
        일치된 집합에 있는 모든 엘리먼트에 지정한 이벤트 타입의 핸들러로 전달된 함수를 할당한다.
      - 매개변수
         eventType: (String)핸들러를 할당할 이벤트 타입의 이름
         eventData: (Object)핸들러 함수에서 사용하도록 Event 인스턴스에 data라는 프로퍼티로 제공되는 데이터. 생략 가능
      - 반환값 - 확장 집합

   - 사용예
      // '.'을 통하여 여러 커맨드를 실행할 수가 있다.
      $('img').bind('click', function(event){
           alert('안녕1!');
       })
      .bind('click', function(event){
           alert('안녕2!');
      })
      .bind('click', function(event){alert('안녕3!');
      });

    // a 라는 id를 가지고 있는 요소를 마우스 클릭 시 body에 test_class라는 CSS class를 추가한다.
    $(function(){
        $('#a').bind('click', function(){
            $('body').addClass('test_class');
        });
    });

 

   2) bind(events)
      - 의미
        bind를 이용하여 이벤트를 여러개 추가할 수 있다.

  • 사용예
          // a 라는 id를 가지고 있는 요소를 마우스 오버시 '마우스오버'라는 경고 문구가 나타나고 마우스 클릭시 '클릭'이라는 경고 문구가 나타난다.
          $(function() {
            $("#a).bind({
                click : function() {
                    alert("클릭");
                },
                mouseover : function() {
                    alert("마우스오버");
                }
             });
          });

     

   3) one(eventType, [eventData], handler(eventObject))
      - 의미
        일치된 모든 엘리먼트에 지정한 이벤트 타입의 핸들러로 전달된 함수를 할당한다. 실행된 뒤 삭제된다.
      - 매개변수
        eventType: (String)핸들러를 할당할 이벤트 타입의 이름
        eventData: (Object)핸들러 함수에서 사용하도록 Event 인스턴스에 data라는 프로퍼티로 제공되는 데이터. 생략 가능
        handler: (Function)이벤트 핸들러로 할당될 함수
      - 반환값
        확장 집합

  • 사용예
          // a 라는 id를 가지고 있는 요소를 클릭 하면 one CSS class를 추가하고 바로 click 이벤트가 해제된다.
          $(function(){
              $('#a').one('click', function(){
                $('body').addClass('one');
              });
          });

     

   4) trigger(eventType, extraParamters)
      - 의미
         각 요소의 인수로 건네준 이벤트를 한번 실행

      - 사용예
        // a라는 id를 가진 요소의 click 이벤트를 실행한다.
       $(function(){
           $('#a').trigger('click');
       });

     // trigger() 메서드 기능을 간소화하여 사용하였다.
      $(function(){
          $('#a').click();
      });

 

   5) triggerHandler(eventType, extraParamters)
      - 의미
        요소의 이벤트를 실행하지만 핸들러에 들어가 있는 함수만을 실행한다. 브라우저가 디폴트로 가지고 있는 동작은 행해지지 않는다.

 

   6) unbind(eventType, [eventData], handler(eventObject))/unbind(event)
      - 의미
        확장 집합의 모든 엘리먼트에서 전달된 매개변수에 따라 이벤트 핸들러를 선택적으로 제거한다.
      - 매개변수
        eventType: (String)매개변수를 제공하면 지정된 이벤트 타입에 할당된 리스너만 제거한다.
         handler(eventObject): (Function)매개변수를 제공하면 지정된 리스너와 동일한 것만 제거한다.
        event: (Event) Event인스턴스의 정보로 알 수 있는 이벤트가 발생했을 때 호출될 리스너를 제거한다.
      - 반환값 : 확장 집합

  • 사용예
          // a 라는 id를 가지고 있는 요소를 마우스 클릭시 test의 기능인 body에 test_class라는 CSS class를 추가하는 기능을 만든후 unbind 메서드를 이용하여 다시 그 기능을 제거하고 있다.
          $(function(){
              var test = function(){
                  $('body').addClass('test_class');
              };
              $('#a').click(test);
              $('#a').unbind('click', test);
          });

     

  7) click(handler(eventObject))
      - 의미
        핸들러를 이벤트에 연결하는 것은 흔한 작업이기 때문에, jQuery는  보다 더 간단하고 명료한 방식의 간소화된 이벤트 메서드를 제공하고 있다.

  •  사용예
            // a 라는 id를 가지고 있는 요소를 클릭시 body에 test_class라는 CSS class를 추가시킨다.
            $(function(){
                $('#a').click(function(){
                    $('body').addClass('test_class');
                });
            });

     

    8) click()
      - 의미
        click 이벤트를 실행 시킨다.

  • 사용예
            // a 라는 id를 가지고 있는 요소의 click 이벤트를 실행시킨다.
            $(function(){
                $('#a').click();
            });


 ο Interaction Helpers
   1) hover(handerIn(eventObject), handerOut(eventObject))
      - 의미
       요소에 마우스가 이동 했을 때의 동작을 설정한다. out은 마우스가 벗어났을 때 호출

  • 사용예
          // a 라는 id 가지고 있는 요소에 마우스 커서가 들어가면 hover CSS class 를 추가하고 마우스가 떠나면 hover CSS class를 제거 한다.
          $(function(){
              $('#a').hover(function(){
                  $('body').addClass('hover');
              }, function(){
                  $('body').removeClass('hover');
              });
          });


   2) toggle(fn1, fn2, ..., fnN)
      - 의미
       클릭될 때마다 함수를 차례로 호출

  • 사용예
           // a 라는 id를 가지고 있는 요소를 처음 클릭시 body에 test_class라는 CSS Class를 추가되고 두 번째 클릭시 body에 test_class라는 CSS class를 제거한다. 이 후 두 함수가 교대로 실행된다.
           $(function(){
               $('#a').toggle(function(){
                  $('body').addClass('test_class');
              }, function(){
                  $('body').removeClass('test_class');
              });
          });

     

 ο Live Events
   1) live(eventType, eventData, handler)
      - 의미
        이벤트에 대해서 핸들러를 등록한다. 등록된 이벤트는 셀렉터에 매치하는 모든 요소에 적용된다. 커스텀 이벤트에 대해서bind하는 것도 가능하다. 이 함수로 지정할 수 있는 이벤트는 click, dblclick, mousedown, mouseup, mousemove, mouseover, mouseout, keydown, keypress, keyup 이다.

       jQuery 1.4부터는 ".live()" 메소드에서 사용할 수 있는 이벤트 종류가 늘었다.  "submit", "change", "focus" 그리고 "blur"이다. ".live()" 메소드를 이용하면 이벤트 할당 이후 새롭게 추가되는 요소에도 반영되기 때문에 효율적이다.

       그러나 이벤트의 이름을 작성할 때 신중해야한다. "focusin" 그리고 "focusout" 은 "focus" 와"blur" 이벤트를 위임하기 때문입니다.

       jQuery('input').live('focusin', function(){
           // do something with this
       });

 

  2) die()
      - 의미
        등록된 이벤트를 삭제 한다.


 ο delegate()와 undelegate()
    - delegate(selector, eventType, handler)
       selector: 타겟인 엘리먼트
       eventType: 이벤트 명 지정(click,keydown등)
       handler: 실행할 이벤트 지정

    - undelegate()는 delegate()의 해제 메소드이다.

       delegate()는 live()를 대신하여 추가된 메서드이다. delegate()와 undelegate()는 특정 루트와 특정 이벤트에 대한 처리를 단순화 하며, 기존의 .live()의 단점을 보안했다.
       1.3버전에 추가된 live()는 bind()를 사용함에 있어서 보다 더 유연하게 이벤트에 접근할 수 있었다.
       기존에는 동적으로 생성되는 엘리먼트에 이벤트를 다시 걸려면 bind()를 해야 하는 번거로운 작업이 필요했다. 이것을 live()는 동적으로 추가되는 개체들에 대해서도 이벤트를 그대로 상속해 줄 수 있다.

      - 사용예
       // <td>을 클릭 할 경우 <tr>행이 추가되면서 동시에 클릭 이벤트가 바인딩
      $(function(){
         $("td").live("click", function(){
         $(this).parent().parent().after("<tr><td><p>"+text+"</p></td></tr>"); });
      });

      하지만 약간의 문제점이 있니다.

      첫 번째로는 탐색(Traversing)메서드를 사용하여 필터링이나 찾기를 통해서는 접근할 수 없다.
      $("td").eq(1).live("click", function(){
        $(this).parent().parent().after("<tr><td><p>"+text+"</p></td></tr>");
      });

      두 번째로는 기본 DOM 엘리먼트는 찾지 못한다.
      $(document.body).live("click", function(){});

      세 번째로는 체인의 맨 위에 있어야 가능하다.
      $("ul li").live("click", function(){});

      따라서 필터 같은 탐색을 이용하여 개체를 찾아 이벤트를 적용시키기 위해서는 일일이 each문을 써서 돌려야 한다.

      $("table").each(function(){
        $("td", this).live("hover", function(){
        $(this).toggleClass("hover"); });
      });// .live()

      $("table").each(function(){
        $("td", this).die("hover");}); // .die()

      반면 .delegate()를 쓴다면 다음과 같다.

      $("table").eq(1).delegate("td:odd","click", function(){
          $(this).parent().parent().after("<tr><td><p>과일</p></td></tr>");
      });

      필터가 가능하다. 즉 .live()보다 강력다.


 ο Event 인스턴스 프로퍼티 
    altKey : Alt 키가 눌리면 true, 아니면 fasle
    ctrlKey : Ctrl 키가 눌리면 true, 아니면 fasle
    data : bind() 커맨드의 두 번째 매개변수로 전달된 값
    KeyCode : 눌린 키를 반환
    metaKey : 메타키가 눌리면 true, 아니면 false
    pageX : 마우스 이벤트의 경우 이벤트가 발생한 x좌표
    pageY : 마우스 이벤트의 경우 이벤트가 발생한 y좌표
    relatedTarget : 마우스 이벤트의 경우 커서가 들어가거나 나온 엘리멘트
    screenX : 마우스 이벤트의 경우 스크린에서 이벤트가 발생한 x좌표
    screenY : 마우스 이벤트의 경우 스크린에서 이벤트가 발생한 y좌표
    shiftKey : Shift 키가 눌리면 true, 아니면 fasle
    target : 이벤트가 발생한 엘리먼트
    type : 이벤트 타입을 명시
    which : 이벤트 키 코드 또는 마우스 눌려진 값(왼쪽1, 중간2, 오른쪽3)
 
      - 사용예
        $(function(){
           $('.test').keypress(function(event){
               if (event.which && (event.which  > 47 && event.which  < 58 || event.which == 8)) {
                   alert('숫자임!');
               } else {
                  alert('숫자아님!');
                  event.preventDefault();
               }
           });
       });
             :
      <div class="test">
          <input type="text"/>
      </div>

       ie 계열의 Browser에서는 event.returnValue = false;
       그 외의 Browser에서는 event.preventDefault();
       를 이용하여 자기 자신의 기본 이벤트를 취소 한다.


 ο Event Helpers
   - blur()
     각 요소의 blur 이벤트를 실행. blur 이벤트는 요소가 마우스등의 pointing, device나 탭 키등에서 포커스를 잃은 때 발생.
   - blur(handler(eventObject))
     각 요소에 blur이벤트를 설정
   - change()
     각 요소의 change 이벤트를 실행. change 이벤트는 포커스를 잃은 상태의 input요소가 포커스를 얻고, 값의 변경을 완료했을 때에 실행된다.
   - change(handler(eventObject))
     각 요소에 change 이벤트를 설정
   - click()
     각 요소의 click 이벤트를 실행
   - click(handler(eventObject))
     각 요소에 click 이벤트를 설정
   - dblclick()
     각 요소의 dblclick 이벤트를 실행
   - dblclick(handler(eventObject))
     각 요소에 dblclick 이벤트를 설정
   - error()
     각 요소의 error 이벤트를 실행. 브라우저의 디폴트의 error의 동작과 이것에 bind된 모든 함수가 실행된다.
   - error(handler(eventObject))
     각 요소에 error 이벤트를 설정
   - focus()
     각 요소의 focus 이벤트를 실행. focus 이벤트는 마우스등의 pointing, device 나 탭 키로 요소가 포커스를 받았을 때에 실행 한다.
   - focus(handler(eventObject))
     각 요소에 focus 이벤트를 설정
   - focusin( handler(eventObject)) / focusin( [ eventData ], handler(eventObject))
     focusout( handler(eventObject) ) / focusout( [ eventData ], handler(eventObject))
     "focus"와 "blur" 이벤트를 위임한 것으로 "focusin"과 "focusout"으로 명명한 것 이다. 특정한 요소 및 자식 요소에서 일어나는 액션을 감지하여 이벤트를 발생한다.

    jQuery('form')
        .focusin(function(){
            jQuery(this).addClass('focused');
        });
        .focusout(function(){
            jQuery(this).removeClass('focused');
        });

     주의해야 할 점은 "bubble"이 발생하지 않는 다는 것이다. 즉 부모 요소는 대상 요소보다 먼저 트리커되는 것을 의미한다.

   - keydown()
     각 요소의 keydown 이벤트를 실행
   - keydown(handler(eventObject))
     각 요소에 keydown 이벤트를 설정
   - keypress()
     각 요소의 keypress 이벤트를 실행
   - keypress(handler(eventObject))
     각 요소에 keypress 이벤트를 설정
   - keyup()
     각 요소의 keyup 이벤트를 실행
   - keyup(handler(eventObject))
     각 요소에 keyup 이벤트를 설정
   - load(handler(eventObject))
     각 요소의 load 이벤트를 설정
   - mousedown(handler(eventObject))
     각 요소의 mousedown 이벤트를 설정
   - mousemove(handler(eventObject))
     각 요소의 mousemove 이벤트를 설정
   - mouseout(handler(eventObject))
     각 요소의 mouseout 이벤트를 설정
   - mouseover(handler(eventObject))
     각 요소의 mouseover 이벤트를 설정
   - mouseup(handler(eventObject))
     각 요소의 mouseup 이벤트를 설정
   - resize(handler(eventObject))
     각 요소의 resize 이벤트를 설정
   - scroll(handler(eventObject))
     각 요소의 scroll 이벤트를 설정
   - select()
     각 요소의 select 이벤트를 실행.  select 이벤트는 텍스트 에리어의 문자열을 선택 상태로 하거나 선택 범위를 변경했을 때에 실행 한다.
   - select(handler(eventObject))
     각 요소에 select 이벤트를 설정
   - submit()
     각 요소의 submit 이벤트를 실행
   - submit(handler(eventObject))
     각 요소에 submit 이벤트를 설정
   - unload(handler(eventObject))
     각 요소에 unload 이벤트를 설정

 

'javascript > jQuery' 카테고리의 다른 글

6. jQuery CSS  (0) 2012.06.07
4. jQuery 조작_Manipulation  (0) 2012.06.07
3. jQuery 속성_Attributes  (0) 2012.06.07
2. jQuery 선택자_Selectors  (0) 2012.06.07
1. jQuery 개요 및 Core  (0) 2012.05.21