반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- for in for of 차이점
- Object for in
- 로컬스토리지 객체 저장
- for in 문 예시
- javascript cookie 얻기
- input type="range"
- 로지텍 버티컬 마우스 사용 후기
- vue scss 전역 설정
- 검색창 autofocus
- array method 요약
- 접근자 프로퍼티
- 객체 반복문
- react 검색 기능 구현
- 접근자 함수
- forEach map 차이
- setter 함수 동기적 실행
- input range 컬러변경
- vscode 재설치
- input range
- vue scss
- javascript cookie 설정
- 로지텍 MX Vertical 마우스
- pip 명령 에러
- vue sass 사용하기
- 로컬스토리지 쓰기 읽기 삭제
- next.config.mjs
- react input autofocus
- vscode 초기화
- javascript cookie 삭제
- for of 문 예시
Archives
- Today
- Total
짬짬이기록하기
event.stopPropagation 본문
반응형
* propagation : 번식
* prevent : 막다
document에서 한 버튼을 click한 경우 우리 눈에는 보이지 않지만, 그 버튼의 부모태그, 그 부모태그의 부모태그 .... 결국엔 최상의 document DOM 까지 클릭이벤트가 전파된다. (Event Bubbling) 이것을 방지하는 것.
*Event Capturing : Bubbling과 반대로 상위노드부터 하위노드까지 전파되는 현상
*Event Phase : 현재 이벤트 흐름의 단계를 나타냄
<div>
<p>
<a href="">클릭</a>
</p>
</div>
<script>
const $a = document.querySelector('a');
const $p = document.querySelector('p');
const $div = document.querySelector('div');
$a.addEventListener('click', function(event){
console.log($a + "click" + event.eventPhase);
}, false);
$p.addEventListener('click', function(event){
console.log($p + "click" + event.eventPhase);
}, false);
$div.addEventLisetner('click', function(event){
console.log($div + "click" + event.eventPhase);
}, false);
</script>
- Target 이벤트에서 캡쳐링 될때는 1
- Target 이벤트까지 도착했을 때는 2
- Tartget 이벤트에서 부모노드로 올라갈 때는 3
- event.stopPropagation : 상위 DOM으로 이벤트 전파 방지 (이벤트 버블링 막기)
- event.stopImmediatePropagation : 상위 DOM 뿐 아니라, 같은 레벨의 이벤트도 전파 방지
- event.preventDefault : 예를들어 a태그의 기본동작(사이트이동)을 중단함
jquery에서 return false는 event.stopPropagation, event.preventDefault를 모두 수행한 것과 같은 결과를 보인다.
jquery를 사용하지 않는다면 return false의 의미는 event.preventDefault.
ex) 모달창 배경 눌렀을 때 닫기 예제
var backClose = document.getElementById('모달'); //모달
backClose.addEventListener('click', function(e){ //모달 태그의 내부 요소를 클릭하면
console.log(e.target);
e.stopPropagation(); //모달 레이어 내의 다른 요소들 클릭 시, 상위DOM으로(모달창 배경) 클릭이벤트가 전파되는 것을 방지
if( e.target == backClose) { //클릭한 타겟이 모달창의 배경일 경우
backClose.style.display = 'none'; // 모달창을 닫음
}
});
반응형
'Web Development > Javascript' 카테고리의 다른 글
동기,비동기 기본 개념 (0) | 2022.09.04 |
---|---|
var, let 차이점 (0) | 2020.07.31 |
selector 정리 (0) | 2020.07.30 |
유용한 jQuery Flipster Infinite Loop (0) | 2020.06.16 |
Javascript로 Accordian 구현하기 (0) | 2020.06.16 |