일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- JQuery
- Carousel
- CSS
- 레이아웃
- position : fixed
- transform
- TRANSITION
- togle
- hover
- scss
- navbar
- EventListner
- sass
- input
- 이벤트 버블링
- 밀리초
- vw
- setTimeout
- z-index
- absolute
- Position
- bootstrap
- css selector
- display:none
- val()
- animate
- float : left
- form
- css animation
- margin
- Today
- Total
Simple Is Best
15. [jQuery] 이벤트 버블링 및 이벤트 메소드 본문
안녕하세요 이번 포스팅에서는 이벤트 버블링 및 여러가지 이벤트 메소드에 대해서 학습해보도록 하겠습니다.
이벤트 메소드
이벤트 리스너를 달았을 때 파라미터로 e 혹은 event를 주어서 할 수 있는 동작들 입니다.
예시를 위해서 폼 HTML 을 가져왔습니다.
HTML
<div class='black-background'>
<div class='white-background'>
<h3 class='text-center mb-5'>Sign in</h3>
<form action="login.php">
<div class="form-group mb-2">
<h5>Email Address</h5>
<input type="text" id='email' class="form-control" placeholder="Email">
<p id='email-alert'></p>
</div>
<div class="form-group mb-5">
<h5>Password</h5>
<input type="text" id='password' class="form-control" placeholder="Password">
<p id='pw-alert'></p>
</div>
<button type="submit" class="btn btn-primary mr-2">Submit</button>
<button type="button" id='btn-close' class="btn btn-danger mr-2">Cancel</button>
</form>
</div>
</div>
▷ e.target
: user 가 실제로 클릭한 요소를 알려주는 메소드
$('.black-background').click(function(e){
console.log(e.target); // 실제 user가 클릭한 요소를 html 태그로 알려준다.
})
User가 white-background를 클릭하면 e.target은 white-background 에 해당하는 HTML 태그들을 출력해줍니다.
▷ e.currentTarget
: 지금 클릭한 요소의 이벤트 리스너가 달린 태그 (상위 태그) 를 알려주는 메소드
$('.black-background').click(function(e){
console.log(e.currentTarget); // user가 클릭한 요소의 이벤트 리스너가 달려있는 곳의 요소를 html 태그로 알려준다.
})
User가 white-background를 클릭하면 e.target은 white-background가 속해있는 상위 이벤트 리스너가 달린 HTML 태그들을 출력해줍니다.
▷ e.preventDedault();
: 기본 동작을 막을 때 쓰는 요소를 명령할 때 사용하는 메소드
▷ e.stopPropagation();
: 상위 요소로의 이벤트 버블링 현상을 막기 위해 사용하는 메소드
이벤트 버블링
간단하게 '이벤트가 상위 요소로 퍼지는 현상' 이라고 생각하시면 됩니다.
예제를 통해서 알아보도록 하겠습니다.
[Target]
로그인 모달창에서 바깥 쪽 검은 background-black을 클릭하면 모달창이 닫히는 UI를 구현하고자 합니다.
구현 코드
$('.black-background').click(function(e){
$('.black-background').fadeOut();
})
아주 완벽하다고 생각한 코드가 작성되었습니다.
하지만 이 코드는 치명적인 문제가 존재합니다.
폼 태그 내부의 어떤 요소를 클릭하던 간에 로그인 모달창은 fadeOut(); 되어 사라집니다......
이것이 바로 이벤트 버블링 현상입니다.
Email Input을 클릭하면 Email input을 클릭한 것 뿐만 아니라
black-background, white-background, Email-input 3가지를 동시에 클릭
한 것으로 브라우저가 인식한 것으로 되어 버립니다.
이러한 현상을 방지하기 위해서 이벤트리스너 메소드를 활용하면 해결 할 수 있습니다.
$('.black-background').click(function(e){
console.log(e.target); // 실제 user가 클릭한 요소를 html 태그로 알려준다.
console.log(e.currentTarget); // user가 클릭한 요소의 이벤트 리스너가 달려있는 곳의 요소를 html 태그로 알려준다.
if(e.target == e.currentTarget){
$('.black-background').fadeOut() ;
}
})
e.target은 현재 사용자가 누른 HTML 요소를 보여주는 메소드,
e.currentTarget은 현재 사용자가 누른 HTML 요소의 이벤트리스너가 달려있는 메소드를 보여줍니다.
현재 이벤트 리스너가 black-background 에 달려있으므로 target 과 currentTarget을 같게 설정할 때만 모달창을 닫아준다면 이벤트 버블링 현상을 방지 할 수 있습니다.
'JavaScript & JQuery' 카테고리의 다른 글
17. [jQuery] Interactive Form - 하드코딩 ver. (0) | 2021.08.05 |
---|---|
16. [jQuery] 이벤트 버블링을 활용한 tab기능 제작 (0) | 2021.08.05 |
14. [jQuery] Tab 기능 제작하기 (0) | 2021.08.02 |
13. [jQuery] Scroll Animation (0) | 2021.07.31 |
12. [JS/JQuery] Carousel (이미지 슬라이더) (0) | 2021.07.30 |