본문 바로가기
WEB/JQuery

이벤트

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




 JQuery는 크로스 브라우징을 자동으로 처리해주고 , 이벤트를 보다 적은 코드로 구현할 수 있도록 해준다.


 - 예제                    > 실행 화면 링크 <

<input type="button" id="original" value="original" />
<input type="button" id="jquery" value="jQuery" />
  
<script src="//code.jquery.com/jquery-3.1.0.min.js"></script>
<script>
    // 순수하게 구현했을 때
    var target = document.getElementById('original');
    if(target.addEventListener){
        target.addEventListener('click', function(event){
            alert('original');
        });
    } else {
        target.attachEvent('onclick', function(event){
            alert('original');
        });
    }
 
    // jQuery를 사용했을 때
    $('#jquery').on('click', function(event){
        alert('jQuery');
    })
</script>




on API 

* JQuery 이벤트 API


1. 기본 문법

.on( events [, selector ] [, data ], handler(eventObject) )

    • event : 등록하고자 하는 이벤트 타입을 지정한다. (예: "click")
    • selector : 이벤트가 설치된 엘리먼트의 하위 엘리먼트를 이벤트 대상으로 필터링함. 생략가능하다.
    • data : 이벤트가 실행될 때 핸들러로 전달될 데이터를 설정함
    • handler : 이벤트 핸들러 함수



2. Selector

* 이벤트 대상을 필터링한다.            

- 예제                    >실행 화면 링크<

<ul> <li><a href="#">HTML</a></li> <li><a href="#">CSS</a></li> <li><a href="#">JavaScript</a></li> </ul> <script src="//code.jquery.com/jquery-3.1.0.min.js"></script> <script> $('ul').on('click','a, li', function(event){    //ul의 엘리먼트를 클릭했을 때, <a>와<li>에 클릭 이벤트를 설치한 것 처럼 동작 alert(this.tagName); }) </script>

* a태그와 li태그에 대해서만 이벤트가 발생할 뿐 ul 태그에는 이벤트가 발생하지 않는다.



3. late binding

* 존재하지 않는 엘리먼트에도 이벤트를 등록할 수 있다.


- 예제 1

<script src="//code.jquery.com/jquery-3.1.0.min.js"></script> <script> $('ul').on('click','a, li', function(event){ alert(this.tagName); }) </script> <ul> <li><a href="#">HTML</a></li> <li><a href="#">CSS</a></li> <li><a href="#">JavaScript</a></li> </ul>

* 위의 코드는 ul 엘리먼트가 존재하지 않을 때 이벤트 설치를 시도하고 있기 때문에 실행되지 않는다.


- 예제 2

<body>
<script src="//code.jquery.com/jquery-1.11.0.min.js"></script>
<script>
    $('body').on('click','a, li', function(event){
        alert(this.tagName);
    })
</script>
<ul>
    <li><a href="#">HTML</a></li>
    <li><a href="#">CSS</a></li>
    <li><a href="#">JavaScript</a></li>
</ul>
</body>

* 위의 코드처럼 body 태그를 선택하면 이미 존재하는 엘리먼트에 이벤트를 설치하는 것이기 때문에 

  나중에 엘리먼트가 추가되도 이벤트를 사용할 수 있다.




3. 다중 바인딩

* 하나의 엘리먼트에 복수개의 이벤트

<input type="text" id="text" /> <p id="status"></p> <script src="//code.jquery.com/jquery-3.1.0.min.js"></script> <script> $('#text').on('focus blur', function(e){    // Focus와 Blur 이벤트 설치, 인자로 전달되는 프로퍼티 중 $('#status').html(e.type);        //타입 프로퍼티의 값이 추가 }) </script>

- 결과


* 이벤트에 따라 다르게 동작하고 싶다면

<input type="text" id="text" /> <p id="status"></p> <script src="//code.jquery.com/jquery-3.1.0.min.js"></script> <script> $('#target').on({ 'focus' : function(e){          $('#status').html(e.type); }, 'blur' : function(e){ $('#status').html(e.type); } }) </script> </script>

- 결과




4. 이벤트 제거

* off를 사용한다.

- 예제

<input type="text" id="text"></textarea>
<input id="remove"  type="button" value="remove" />
<p id="status"></p>
<script src="//code.jquery.com/jquery-3.1.0.min.js"></script>
<script>
  var handler = function(e){
    $('#status').text(e.type+Math.random());
  };
  $('#text').on('focus blur', handler)
  $('#remove').on('click' , function(e){
    $('#text').off('focus blur', handler);
    document.write(32);
  })
</script>

반응형

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

AJAX  (0) 2016.10.19
레퍼 Wrapper  (0) 2016.10.17
Node 변경  (0) 2016.10.15
조회 제한  (0) 2016.10.15
속성 제어  (0) 2016.10.15