jQuery/기본

[jQuery] 특정 영역 외 클릭 이벤트 e.target / e.currentTarget

dev_jiwon 2023. 3. 16.

특정 영역 외 클릭 이벤트 event.target / event.currentTarget

 

개발을 진행하면서, 커스텀 selectbox를 구현하거나, toggle 메뉴 위에 올라오는 서브 메뉴를 구현할 때, 외부 영역을 클릭하게 되면 닫히도록 구현을 해야했다. body를 사용해서 하면되지 않을까라고 생각했지만, 그럼 그에 해당하는 div 영역을 클릭했을 때에도 닫힐 것이다. 그래서 찾아보게 되었고, 정리해보자

 

 

event.target 

이벤트가 발생한 요소를 반환

현재 이벤트가 발생한 요소의 속성들을 얻을 수 있으며, 만약 이벤트가 발생한 대상 id도 가져올 수 있다.

$('.divBox').click(function(event){
	console.log(event.taget);
    console.log(event.target.id);
});

 

event.target말고도 this라는 객체를 이용해 현재 이벤트가 발생한 대상을 가져올 수 있다. 하지만, 주의해야하는 부분이 있다. event.target과 this는 DOM 객체이고, jQuery 객체가 아니기 때문에 jQuery 메소드를 사용할 수 없다.

 

var myTarget = event.target; 이라는 변수가 있을 때, myTarget은 현재 이벤트가 발생한 요소를 가리킨다. 만약 이 요소의 색상을 변경하고 싶다면 myTarget.style.color = "red"; 와 같은 DOM 메소드를 사용해야 한다.

 

그렇다면 jQuery 객체로 요소를 받기 위해서는 어떻게 해야 할까? $(event.target) 또는 $(this)아 같이 사용하면 된다.

var myTarget = $(event.target); 라고 선언했다면, myTarget.css("color", "red"); 와 같이 jQuery 메소드를 사용할 수 있다.

 

이벤트 발생 과정

① 지정된 event target(html 요소에) ② 지정된 event type(클릭이나 스크롤 등)이 발생하면 ③ 지정된 event handler(함수)가 실행된다.

 

event target에서 얻을 수 있는 속성 값

- 다른 프로퍼티와 조합하여 현재 이벤트가 발생한 요소의 속성 값을 얻을 수 있다.

<div id = "Hello">안녕</div>
// 마우스를 클랙했을 때 이벤트 발생
let text = document.getElementById("Hello");
text.addEventListener("click", function(e){
	alert("안녕 안녕");
});

 

tagName / id / textContent

console.log(e.target.tagName); // div
console.log(e.target.id); // Hello
console.log(e.target.textContent); // 안녕

 


이벤트 위임

- 캡처링과 버블링을 활용해서 이벤트 위임 구현 가능

- 요소마다 핸들러를 할당하지 않고, 요소의 공통 조상에 이벤트 핸들러를 하나만 할당해도 여러 요소를 한꺼번에 다루기 가능

<table>
	<tr>
    	<th colspan= "3"><em>Bagua</em> Chart: Direction, Element, Color, Meaning</th>
    </tr>
    <tr>
    	<td class= "nw"><strong>Northwest</strong><br>Metal<br>Silver<br>Elders</td>
        <td class= "n">SKY</td>
        <td class= "ne">RAINBOW</td>
    </tr>
    <tr>...1 more lines of this kind...</tr>
    <tr>...2 nire lines of this kind...</tr>
</table>
table element.onclick = function(e) {
	// td에서 발생한 것이 아니라면 아무 작업도 실행하지 않음
    if (e.target.tagName != 'td') return;
    console.log(e.target.textContent); // event target의 텍스트 가져옴
};

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

참고

 

[특정 영역 외 클릭] event.target & event.currentTarget

Event Delegation, Event Bubbling, Event Capturing 등 순수 javascript 개발하면서 어렴풋이 알던 내용이지만 정확하게 몰랐던 개념

velog.io

 

 

[jquery] 열려있는 팝업 사이드바 외부 영역 클릭시 닫히게 하기

팝업 사이드바를 갖고 있는 웹사이트들은 대체로 열려 있는 팝업 사이드바의 외부를 클릭하면 닫히게 해놓았습니다. 사용자가 느끼기에 그것이 직관적이라고 생각해서 누군가 개발했고 이후에

bskyvision.com

 

 

나 자신이외에 클릭 하면 .. ! (feat. 셀렉트 박스 커스텀 연장선)

기존에 포스팅되었던 글 중 select 태그 커스텀 하기, 혹은 직접 만들기 (feat. javascript) 자신을 제외한 다른 부분을 클릭할 때 닫히게 하려면 어떻게 해야 하는지 질문을 주셔서 따로 다루면 좋을

wazacs.tistory.com

 

 

자바스크립트 특정 영역 외 클릭하면 닫기

자동재생 슬라이드가 있어서 이벤트 객체가 중복되서 찾아졌다. 그래서 먼저 제외하는 작업부터 해줬다. let gnbSlide = false;// 슬라이딩 메뉴가 열려 있는지 확인 //----------메뉴 슬라이딩 이벤트----

twinklehwa.tistory.com

 

 

[TIL / JavaScript] event.target, 이벤트 위임

이번 미니프로젝트에 event target을 사용하면서 이벤트에 대해 다시 한번 찾아보는 기회를 가질 수 있었다🙂 만약 event target 속성과 이벤트 위임이라는 특성이 없었다면 일일이 달력 칸마다 input

velog.io

https://joshua1988.github.io/web-development/javascript/event-propagation-delegation/

 

이벤트 버블링, 이벤트 캡처 그리고 이벤트 위임까지

(기본) 이벤트 버블링, 이벤트 캡처링, 그리고 이벤트 위임까지 이벤트 전달 방식과 관련된 모든 것을 파헤쳐 봅니다.

joshua1988.github.io

 

 

 

 

 

'jQuery > 기본' 카테고리의 다른 글

[jQuery] html(), text(), val() 구분  (0) 2023.03.17
💡attr vs prop  (0) 2022.12.14
input form reset function  (0) 2022.10.17
4. 객체 조작 - 예제  (0) 2022.06.09
4. 객체 조작 - 객체 편집 메서드  (0) 2022.06.09

댓글