loading

웹 페이지에 버튼이 여러 개 있고 각각의 버튼은 서로 다른 일 한다. 

버튼에 대한 이벤트를 올바로 처리하려면 이 여러 개 버튼들 중

어느 버튼을 클릭했는지 알아야 하는데 이 방법을 알아보자.

 

1. 이벤트 객체의 target 속성 이용

 

자바스크립트는 이벤트 객체를 이벤트 처리 함수에 전달하며,

이벤트 객체에는 이벤트에 대한 세부 내용이 담겨 있다.

그중 하나인 target은 이벤트가 일어난 엘리먼트를 찾는 데 사용할 수 있다.

 

 

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <script src="https://code.jquery.com/jquery-3.1.0.js"></script>
  <script>
    $(document).ready(function(){
        $(".click-btn").on('click', function(e){
            console.log(e.target.id)
        });
    });
  </script>
  <title>JS Bin</title>
</head>
<body>
  <button class="click-btn" id="btn-1">1 번 버튼</button>
  <button class="click-btn" id="btn-2">2 번 버튼</button>
  <button class="click-btn" id="btn-3">3 번 버튼</button>
  <button class="click-btn" id="btn-4">4 번 버튼</button>
</body>
</html>

 

 

코드를 보면 html 부분에는 버튼 4개가 있고 각 버튼에는 class 명을 동일하게 적어주고

class 명을 동일하게 다 적는 이유는 저 버튼 4개를 전부 한 번에 클릭 이벤트 등록을 하려고 하는 것이니

class 명을 동일하게 적어주어야 한다.

 

그리고 각 버튼의 id는 다르게 식별이 가능할 수 있도록 지정해주어야 한다.

이제 자바스크립트 부분을 봐보면 제이쿼리 선택자가

click-btn이라는 클래스명으로 버튼 클릭 이벤트를 등록했다.

 

그럼 저 1~4개의 버튼을 클릭하면 전부 반응을 할 것이다.

하지만 내가 클릭한 버튼을 인지해야 되기 때문에

클릭한 버튼의 target 속성을 이용하면 구현하기 쉽다.

 

// 각개 버튼이 클릭될 때 해당 버튼의 구현하고 싶은 코드 구현 방법

$(".click-btn").on('click', function(e){
    if(e.target.id === 'btn-1'){
        // 1번 버튼을 클릭했을 때 구현하고 싶은 코드
    }else if(e.target.id === 'btn-2'){
        // 2번 버튼을 클릭했을 때 구현하고 싶으 코드
    }
});



// 각개 버튼이 클릭될 때 해당 버튼의 색을 빨간색으로 바꾸는 예제
$(".click-btn").on('click', function(e){
	$(e.target).css({'background-color':'red'});
});

위 코드처럼 어떤 버튼이 클릭이 되었는지 확인할 수 있다.

그리고 click 이벤트를 좀 다르게 해석하는 사람들이 있는데 어떤 부분이냐면,

버튼을 클릭했는데 왜? 이벤트가 발생이 안되는지?라는 사람들이 있다.

 

이게 무슨 말이냐면 클릭했을 때 발생되는 게 아니라 클릭하고 마우스에서 손을 떼면 발생하는 이벤트다.

이게 click 이벤트이다.

 

만약 내가 클릭하는 순간 마우스를 버튼을 누르는 순간 이벤트를 발생해야 한다 싶으면

다른 이벤트를 사용해야 한다.

이럴 땐 아래 코드처럼 mousedown 이벤트를 사용하면 된다.

 

$('.click-btn').on('mousedown', function(e){
    console.log(e.target.id)
});

 

 

 

2. 더블클릭 이벤트 연결하기

 

버튼을 더블 클릭해야 해야지만 이벤트 처리를 해야 되는 코드를 만들어야 한다면

jQuery는 이 더블클릭 이벤트를 지원한다.

 

어렵지 않다 예제를 봐보자.

위와 동일한 코드에서 자바스크립트 부분만 수정할 것이다.

 

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <script src="https://code.jquery.com/jquery-3.1.0.js"></script>
  <script>
    $(document).ready(function(){
        $('.click-btn').on('dblclick', function(e){
            console.log(e.target.id)
        });
    });
  </script>
  <title>JS Bin</title>
</head>
<body>
  <button class="click-btn" id="btn-1">1 번 버튼</button>
  <button class="click-btn" id="btn-2">2 번 버튼</button>
  <button class="click-btn" id="btn-3">3 번 버튼</button>
  <button class="click-btn" id="btn-4">4 번 버튼</button>
</body>
</html>

 

위와 동일 html 문서에 자바 스크립트 부분의 click 부분 -> dblclick로 바꿔 주기만 했다.

이렇게만 해주면 버튼은 두 번을 클릭해야지만 동작한다.

반응형

+ Recent posts