티스토리 뷰

 

 

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);

});

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
링크
«   2024/05   »
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 31
글 보관함