티스토리 뷰
Event Bubbling
자바스크립트에는 Event Bubbling이라는 개념이 있다. 이것은 한 자식 요소에서 이벤트가 발생했을 때 부모 요소에 이벤트를 전파하는 것을 의미하여 Event Bubbling이라고 말한다.
다음 예제 코드를 보자.
HTML
<div class="parent">
<button class="child"> Click me to check </button>
</div>
<input type="checkbox" id="chekbox">
JavaScript
$('.parent').on('click', function() {
('#checkbox').prop('checked', false);
});
$('.child').on('click', function() {
$('#checkbox').prop('checked', true);
});
.parent 클래스가 .child 클래스 버튼을 가지고 있으며 부모와 자식 요소에 같은 click 이벤트가 바인딩 되었다.
.child는 체크박스에 체크를 하고, .parent는 체크를 해제한다.
.child 요소를 클릭할 경우에 .child 에 걸린 click 이벤트가 동작하여 체크박스에 체크가 되어야 할 것이다.
하지만 실제로 버튼을 누를 경우 아무 일도 일어나지 않는다.
그 이유는 Event Bubbling 때문이다.
.child 요소를 클릭했을 때 Event Bubbling으로 인해 부모 요소로 이벤트가 전파되었고, 그 때문에 .parent 에 바인딩 된 체크 해제 이벤트가 동작하면서 체크가 되지 않은 상태가 된 것이다.
위와 같은 코드는 코드 이해를 돕기 위해 작성되어 와닿지 않을지도 모르지만 실제로 Event Bubbling을 막아야 할 일이 종종 있다.
e.stopPropagation();
기존 코드에 한 줄만 추가하면 된다.
$('.parent').on('click', function() {
$('#checkbox').prop('checked', false);
});
$('.child').on('click', function(e) {
e.stopPropagation(); /* event Bubbling 막기 */
$('#checkbox').prop('checked', true);
});
'프로그래밍 > Front end' 카테고리의 다른 글
[Front end] Javascript 배열 선언과 함수 (0) | 2019.07.03 |
---|---|
[Front end] Javascript 배열에 대한 고찰(delete와 splice) (0) | 2019.07.03 |
[Front end] Javascript 콜백 (0) | 2019.05.04 |
[Front end] Javascript 비동기 (0) | 2019.04.29 |
[Front end] Javascript 동치 비교 == , === 차이점 (0) | 2019.02.07 |
- Linux 명령어
- 프로그래머스
- Collection
- effective java
- 프로그래머
- 리눅스 명령어
- 정렬 알고리즘
- 자바스크립트
- 자바
- spring
- javascript
- 개발환경
- 오라클
- 리액트 16
- Eclipse
- SQL
- 회고
- 성능분석
- 소프트웨어공학
- 제주도 여행
- Maven
- 이직
- 리액트
- sort algorithm
- React
- 경력관리
- 제주도 3박4일 일정
- Tomcat
- 오라클 내장 함수
- Java
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |