합성이벤트

jQuery의 사용자 정의 핸들러로 .toggle()과 .hover() 메서드가 있으며, 합성 이벤트 핸들러라고 부른다.


.toggle() 메서드

두 개 이상의 함수 인자를 가진다.

처음 클릭하면 첫 번째 함수가 실행, 두 번째 클릭하면 두 번째 함수가 실행된다.


.toggleClass() 메서드

클래스의 존재 유무를 검사해 자동으로 추가하거나 제거해준다.

$('#btn').toggleClass('hidden'); // hidden 클래스가 btn에 있으면 제거, 없으면 추가


.hover() 메서드

두 개의 함수를 인자로 가진다.

마우스 커서가 들어가면 첫 번째 함수가 실행, 커서가 벗어나면 두 번째 함수가 실행된다.

$('#btn').hover(function() {

$(this).addClass('hover');

}, function() {

$(this).removeClass('hover');

});


이벤트의 여행

페이지에서 이벤트가 발생하면 DOM 전체 계층에 있는 모든 요소가 이벤트를 처리할 기회를 가진다.

반응에 대한 책임!


- 이벤트 캡처링

모든 것을 감싸고 있는 최상위 요소에게 이벤트가 처음으로 주어지고 그 후 연속해서 하위 요소로 전달된다.


- 이벤트 버블링

가장 낮은 자식 요소에 처음으로 전달되고, 반응 후 부모 요소에게 전파된다.


이벤트는 두 가지 과정 각각에 등록할 수 있다.

jQuery는 버블링 단계에 이벤트 핸들러를 등록한다. -> 첫 번째 이벤트 반응이 항상 최하위 특정 요소임을 보장받음


이벤트 버블링의 부작용

<div> <-  여기에 mouseout 이벤트 핸들러가 걸려 있는데

<a>test</a> <- 여기 커서를 벗어나면 mouseout 이벤트가 보내질 것이고, 버블링되어 div에 걸려있는 mouseout 이벤트 핸들러가 실행 될것이다.

</div>

원치 않는다! .mouseenter과 .mouseleave 이벤트는 개별적으로 연결되고, .hover()메서드로 문제를 방지할 수 있다.


진행 경로 수정하기 : 이벤트 객체

<div> <- 여기에 클릭하면 사라지게 이벤트 핸들러를 걸어놨는데,

<button>btn</button> <- 버튼 클릭하면 div가 사라진다. 이벤트 버블링 때문에!

</div>

이벤트 객체에 접근 할 수 있어야한다. -> 이벤트가 발생할 때 각 요소의 이벤트 핸들러로 넘겨지는 DOM 객체!

$(document).ready(function() {

$('#mydiv').click(function(event) { // 매개변수를 추가하면 된다. 이름은 자유.

if(event.target == this) {

$('.btn').toggleClass('hidden');

}

});

});

event 변수를 추가함으로써 핸들러에서 이벤트 객체를 사용할 수 있다.

event.target 프로러티를 사용하면 어느 이벤트가 처음으로 받은 요소인지(click 이벤트는 실제로 클릭된 요소) 알 수 있다.

this는 현재 이벤트를 처리하고 있는 DOM 요소이다.

이벤트를 받고 있는 애가 지금 처리하고 있는 mydiv일 때만(this) 버튼들을 숨긴다. 버튼을 누르면 안숨긴다.


.stopPropagatin() 메서드를 이용하여 이벤트 객체는 버블링 과정을 완전히 중단 할 수 있다.

기본 동작을 원치 않을 때 이벤트에 .preventDefault() 메서드를 호출하면 이벤트에 의해 기본 동작이 수행되는 일을 방지 할 수 있다. -> 잘 이해가 되지 않는다..ㅜㅜ


이벤트 위임

이 부분 잘 이해되지는 않는데, 버블링을 이용해서 이득을 얻을 수 있는 기법이라는 것 같다.

이벤트 위임을 활용해서 하나의 요소가 다른 여러가지 작업을 수행할 수 있도록 핸들러를 추가할 수 있다.

성능과 관련해서 얘기하는 것 같다...;

.is()는 현재 jQuery 객체가 지정한 선택자 표현식을 만족시키는지 검ㄴ사, 선택자에 해당하는 요소가 하나라도 있으면 true 반환.


이벤트 핸들러 제거하기

.unbind() 메서드를 사용한다.

$('.btn').unbind('click');


이벤트 네임스페이스 -> 잘 모르겠으나, 함수를 나중에 쓰기 위함인듯.. bind('식별하고자하는 이벤트이름', function()');


이벤트 다시 바인딩하기

funciton 함수가 변수에 할당된 경우를 종종봤는데, 이게 도대체 다른 점이 무엇인가 생각했었는데, 핸들러에 함수에 이름을 부여하는 것이었다.

var myfun = function(event) { ... };

나중에 이 함수를 다시 바인딩하고 싶을 때는 .bind('click', myfun); 이렇게 사용한다.

.one() 메서드는 이벤트 핸들러가 한 번만 호출된 후 바로 해제되기를 원하는 상황에서 사용한다.

$('.btn').one('click',myfun);


사용자 상호작용 흉내 내기

실제 이벤트가 발생하지 않았지만, 이벤트 핸들러 코드를 실행하고 싶을 때!

예로 페이지 로드할 때 원하는 객체에 click 이벤트가 실행된 상태에서 로드되길 원할 때!

$('.btn').trigger('click'); = $('.btn').click();


키보드 이벤트

종류 1. 키보드에 직접 반응하는 이벤트(keyup, keydown) - 어떤 키를 눌렀는지 알고 싶으면

종류 2. 텍스트 입력에 반응하는 이벤트(keypress) - 어떤 글자가 입력됐는지 알고 싶다면

키보드 이벤트 대상은 포커스를 가진 요소!

어떤 키를 눌렀는지 알기 위해 event 객체를 조사한다.

event.keyCode 프로퍼티는 눌려진 키에 대한 식별 값이 있 으며, 알파벳 키에 대해서 이 값은 대문자 ASCII 값이다.

그러므로 글자가 눌릴 때 매핑시키는 맵 또는 문자 객체를 만들어서 맵에 있는 확인하고, 그 값에 따라 이벤트 실행.

p.80

'개발 > Web' 카테고리의 다른 글

크롬확장프로그램 개발  (0) 2013.01.12
2012. 12. 03. 학습일지(3장-01)  (0) 2012.12.03
2012. 11. 30. 학습일지(2장-02)  (0) 2012.11.30
2012. 11. 29. 학습일지(2장-01)  (0) 2012.11.30
2012. 11. 28. 학습일지(1장)  (0) 2012.11.29

+ Recent posts