JavaScript 이벤트 기본 행동 취소
이 예제는 이벤트가 발생했을 때 브라우저가 어떤 정보를 전달하고, 이벤트가 DOM 트리 안에서 어떤 순서로 이동하는지 보여줍니다. 또한 링크 이동이나 체크박스 선택처럼 브라우저가 기본으로 수행하는 동작을 취소하는 방법도 함께 다룹니다.
리스너 함수가 실행되는 것만으로는 어떤 이벤트가 발생했고, 어느 요소에서 시작했으며, 기본 행동이 취소됐는지 알 수 없습니다. 이벤트 객체는 이런 정보를 한 번에 담아 전달합니다.
| 프로퍼티 | 의미 | 예제 결과 |
|---|---|---|
| type | 이벤트 종류 | click |
| target | 이벤트가 발생한 실제 요소 | button 또는 input |
| currentTarget | 현재 리스너가 붙은 요소 | body, button |
| defaultPrevented | 기본 행동 취소 여부 | true 또는 false |
target은 실제 클릭된 원래 요소이고, currentTarget은 지금 실행 중인 리스너가 등록된 요소입니다. 이벤트가 버블링되면 두 값이 달라질 수 있습니다.
이벤트는 DOM 트리에서 바로 타깃만 실행하고 끝나는 것이 아니라, 상위에서 내려오고 타깃을 지나 다시 상위로 올라가는 흐름을 가질 수 있습니다.
예제에서는 body에 캡처 리스너와 버블 리스너를 모두 등록하고, button에는 버블 리스너를 등록합니다. 버튼을 클릭하면 body 캡처, button 버블, body 버블 순서로 메시지가 쌓입니다.
이 순서를 이해하면 부모 요소에 이벤트를 한 번만 등록해서 자식 요소의 이벤트를 처리하는 이벤트 위임도 이해하기 쉬워집니다.
링크는 클릭하면 href로 이동하고, 체크박스는 클릭하면 체크 상태가 바뀝니다. 이런 동작은 JavaScript를 쓰지 않아도 브라우저가 기본으로 수행합니다.
| 기본 행동 | 취소 방법 | 결과 |
|---|---|---|
| 링크 이동 | return false | 이동하지 않음 |
| 체크박스 선택 | preventDefault() | 체크 상태 변경 취소 |
| 폼 제출 | preventDefault() | 페이지 이동 없이 검증 가능 |
| 컨텍스트 메뉴 | preventDefault() | 우클릭 메뉴 차단 가능 |
링크 예제의 onclick="return query()"는 confirm 결과를 그대로 반환합니다. 확인을 누르면 true가 반환되어 링크가 이동하고, 취소를 누르면 false가 반환되어 이동하지 않습니다.
preventDefault()는 이벤트 전파 자체를 멈추는 것이 아니라 브라우저의 기본 행동만 막습니다. 이벤트 리스너는 실행되고, 필요하면 다른 리스너로 버블링도 이어질 수 있습니다.
| 실수 | 증상 | 해결 |
|---|---|---|
| target과 currentTarget을 같은 것으로 생각함 | 부모 리스너에서 엉뚱한 요소를 기준으로 처리합니다. | 이벤트 위임에서는 두 값을 반드시 비교합니다. |
| 캡처 인자를 잘못 설정 | 예상과 다른 순서로 메시지가 출력됩니다. | true는 캡처, false는 버블 단계입니다. |
| preventDefault를 전파 중단으로 오해 | 다른 리스너가 계속 실행되어 당황합니다. | 기본 행동 취소와 전파 중단을 구분합니다. |
| 인라인 onclick에서 return 생략 | false를 반환해도 링크가 이동합니다. | onclick="return 함수()" 형태로 작성합니다. |
| event 객체를 전달하지 않음 | preventDefault를 호출할 대상이 없습니다. | 인라인에서는 함수(event), 리스너에서는 매개변수를 받습니다. |
| 체크 | 통과 기준 |
|---|---|
| 이벤트 객체 | type, target, currentTarget, defaultPrevented를 설명할 수 있습니다. |
| 이벤트 흐름 | 캡처링, 타깃, 버블링 순서를 구분합니다. |
| 리스너 등록 | 세 번째 인자의 true/false 의미를 압니다. |
| 기본 행동 | 링크 이동과 체크박스 선택이 기본 행동임을 압니다. |
| 취소 처리 | return false와 preventDefault의 적용 위치를 구분합니다. |
핵심 한 줄 요약
Tags
'php' 카테고리의 다른 글
| JavaScript 마우스 이벤트 — 클릭·휠·좌표·우클릭 완전 정리 (0) | 2026.07.05 |
|---|---|
| JavaScript onload · eval 계산기 완전 정리 (0) | 2026.07.05 |
| JavaScript 이벤트 객체·흐름 — 캡처·버블링 완전 정리 (0) | 2026.07.05 |
| JavaScript 이벤트 리스너 — 4가지 등록 방식 완전 정리 (0) | 2026.07.05 |
| JavaScript 동적 DOM — createElement·appendChild·removeChild 완전 정리 (0) | 2026.07.05 |
왕진 블로그

댓글