JAVASCRIPT -

jquery 이벤트 와 this 그리고 화살표 함수

  • -

jquery 이벤트 와 this 그리고 화살표 함수

안녕하세요 TriplexLab 입니다.

ES6에서는 function 대신 화살표 함수(=>)를 사용합니다.
영어로 Fat Arrow라고 부르는 표기법은 단순히 function을 바꾼 것으로 알고 있는 분들이 계시지만

실제론 그렇지 않습니다.

//1번
$('.ele').click(function(){
    console.log(this);
});

//2번
$('.ele').click(()=>{
    console.log(this);
});

1번은 .ele의 this = ele(자기 자신)을 가리킨다.

2번은 .ele의 this = global(window)을 가리킨다.

​그러면 어떻게 기존 jquery 코드를 화살표 함수 형태로 변경할 수 있을까요??

//1번
$('.ele').click(function(){
    $(this).addClass('clicked');
});

//2번
$('.ele').click((e)=>{
    $(e.target).addClass('clicked');
});

화살표함수 내에 매개변수를 넣어 선택된 엘리먼트를 지정해줍니다.
위에서와 동일하게 작동합니다.

e.target는 현재 내가 클릭한 대상을 말한다.
ele를 선택한 엘리먼트 뿐 아니라 자식 엘리먼트에게도 영향을 준다.

.ele만 영향을 주고 싶다면 아래와 같이 하면 된다.

$('.ele').click((e)=>{
    $(e.currentTarget).addClass('clicked');
});

e.currentTarget는 현재 이벤트를 선택한 대상을 만한다. 즉 this와 같다.

e.currentTarget == this 현재 이벤트가 달린 곳 (EventListener 왼쪽에 있는애)

e.target == 현재 내가 클릭한 대상(자식태그)

엘리먼트 하위의 특정 자녀에게만 이벤트 위임을 부여하는건 어떻게 할 수 있을까요??

<ul class="my-list">
    <li class="list">하나</li>
    <li class="list">둘</li>
    <li class="list">셋</li>
</ul>

 

$('.my-list').on('click', 'li', (e)=>{
    $(e.currentTarget).addClass('clicked');
});

이렇게 .my-list에 대해서 이벤트를 하나 부여하여 모든 <li>태그에 대해서 동일한 이벤트를 부여할 수 있습니다.

위의 코딩 스타일은 각각의 <li>에 이벤트를 부여하는 것보다 자원을 아낄 수 있을 뿐 아니라 유지보수에도 도움을 줍니다.

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.