Notice
Recent Posts
Recent Comments
Link
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Archives
Today
Total
관리 메뉴

도도의 IT이야기

[jQuery] 이벤트 바인딩 본문

IT/자바스크립트

[jQuery] 이벤트 바인딩

도도버드 2020. 5. 12. 22:28

우리는 지금까지 이벤트를 이런형식을 달아왔습니다

button[0].addEventListener('click',myFunc);

이렇게 jquery object를 unwrap을 하고 Vanilla js의 메소드를 사용할 수 있었습니다. 하지만 여기에 한가지 문제가 있습니다. vanilla js addeventlistener는 IE8이나 다른 인터넷 버전 호완이 안좋다는 거죠. 그래서 우리는 jQuery의 이벤트 바인딩 메소드를 사용할 수 있습니다.

 

.on()은 addEventListner랑 같은 방식으로 사용될수 있습니다.

button.on('click',myFunc);

이런 식으로 말이죠 이제 클릭하면 콜백함수인 myFunc이 실행될것입니다.

 

.on의 엄청난 장점이 하나 있습니다.

 

이런 JS코드를 봅시다

list = document.getElementsByClassName('menu-list');//list에 array-like가 담김

//array-like를 array에 담아야함
Array.from(list);

//그리고 array안에 있는 element에 전부 이벤트 리스너를 바인딩하려면 for loop을 사용해야함
Array.from(list).forEach(item=>{
   item.addEventLister('click',myFunc);
});

이렇게 하나의 element가 아닌 여러 element를 select했을때 각 for loop과 Array.from메소드를 사용해야 이벤트 리스너를 바인딩 시킬 수 있습니다.

 

하지만 on을 통하여 이것을 굉장히 쉽게 할 수 있습니다.

list = $('.menu-list');//jQuery가 알아서 .menu-list를 array에 담아줌

list.on('click',myFunc);//for loop을 사용할 필요없이 모든 array element에 이벤트를 바인딩 해줌

.on 을 사용하니 굉장히 쉽죠?

 

그리고 언바인딩을 하고 싶으면 이렇게 하면됩니다.

list.off('click');

 

이제 바인딩을 .on()을 더 쉽게 사용할 수 있는 event helper을 봅시다.

 

list.on('click',function);

list.click(function);

위 코드를 .on을 사용하지 않고 바로 메소드처럼 사용할 수 있습니다. 

list.dblclick(function)//모든 이벤트들이 이렇게 사용가능함

 

.off는 줄일 수 없습니다.

.off('click') 이렇게 사용해야함

 

DOCUMENT READY, WINDOW LOAD

우리가 jQuery코드를 칠때 제일 처음에 치던게 뭐였죠?

$(document).ready(function(){

//jQuery 코드
)

이제 우리가 별 생각없이 치던 이 코드의 의미를 봅시다.

 

우선 $(document)는 document를 select하는 거겠죠? 

그럼 그 select된 document가 ready일때 콜백 함수를 실행하는 겁니다.

그러니까 우리가 js를 apply해야될 HTML이 다 준비 될때 jQuery를 실행하는 것이죠.

 

그러니까 위코드드 다음과 같습니다

$(document).on('ready',function(){

})

이 코드를 event helper를 사용해 줄인거죠.

 

그럼 window load를 볼까요?

$(window).load(function{
//jQuery 코드
});

이런 식으로 사용이 가능합니다.

document ready와 다른점은 window load는 html뿐만아니라 이미지를 포함한 모든것이 로드 됬을떄 실행하는것이죠.

 

+보너스 Event object in jQuery

우리는 js addEventLIstener에 자동으로 전달되는 event object대해 알고 있습니다.

그 event object를 jQuery에서도 사용할 수 있습니다.

 

$('*').click(function(event){
//code

})

이런식으로 말이죠. 

위 코드는 body안의 모든 태그에 클릭 이벤트 핸들러를 달아준겁니다.

$('*').click(function(event){
   console.log(event.type);
   
   event.stopPropagation();//이것을 사용하면 event bubbling을 멈출 수 있음

})

우리는 어떠한 element가 클릭되면 event.type인 click을 console.log하는 코드를 만들어 봤습니다.

event.stopPropagation()을 한 이유는 지금 모든 body에 있는 element에 이벤트 핸들러가 달려있죠.

그래서 만약 child element가 클릭된다면 child element의 이벤트 핸들러가 실행되겠죠

그 다음은 parent element의 이벤트 핸들러 이런식으로 쭉 올라갈겁니다. 그래서 이런 propagation을 멈추기 위해 stopPropagation()을 사용했습니다.

 

$('*').click(function(event){
   console.log(event.type);
   console.log(event.target);//click한 inner most element가 나옴
   console.log(event.pageX);//click 한 것의 X좌표
   console.log(event.pageY);//Y좌표
   event.stopPropagation();//이것을 사용하면 event bubbling을 멈출 수 있음

})

이렇게 event object를 사용하여 어러가지 event의 정보를 확인 할 수 있습니다.

'IT > 자바스크립트' 카테고리의 다른 글

콜백 vs promise  (0) 2020.05.16
[jQuery]애니메이션 더하기  (0) 2020.05.13
[jQuery] CSS/class 바꾸는 방법  (0) 2020.05.12
[jQuery] 콘텐트 제거 그리고 attribute 바꾸기  (0) 2020.05.12
[jQuery]wrap, unwrap,wrapAll  (0) 2020.05.12