event 위임

erica·2023년 3월 7일
0
<div class="main">
  <h2 class="title">오늘 할 일</h2>
  <ul id="to-do-list">
    <li class="item">자바스크립트 공부하기</li>
    <li class="item">고양이 화장실 청소하기</li>
    <li class="item">고양이 장난감 쇼핑하기</li>
  </ul>
</div>
<style>
.main {
	width: 350px;
	margin: 40px;
  	padding: 30px 0;
  	background-color: #FCFCFC;
 	box-shadow: -5px -5px 20px #DFDFDF,  5px 5px 20px #BABECC;
  	border-radius: 8px;
    text-align: center;
}

.title {
	margin: 15px auto;
	font-size: 30px;
	font-weight: 600;
	color: #9600FF;
}

#to-do-list {
  	width: 280px;
	margin: 0 auto 15px;
	padding: 0;
	list-style: none;
}

#to-do-list li {
	display: flex;
	align-items: center;
	justify-content: center;
  	width: 90%;
  	height: 40px;
	margin: 8px auto 15px;
	border-bottom: 1px solid #9600FF;
	cursor: pointer;
}
</style>
<script>
const toDoList = document.querySelector('#to-do-list');
// 1. updateToDo 함수 실행 > 클릭한 타겟이 item이란 클래스를 가지고 있을때 done 클래스 토글
// event를 매개변수로 받아오니까 함수안에서 사용하는 값도 매개변수를 기본으로 사용한다. 요거 좀 까먹지 말자!!!
function updateToDo(event) {
  if(event.target.classList.contains('item')){
    event.target.classList.toggle('done');
  }
}

// 2. doDoList 클릭시 updateToDo 실행
toDoList.addEventListener('click', updateToDo);

// 새로운 li 추가
const newToDo = document.createElement('li');
newToDo.textContent = '가계부 정리하기';
newToDo.classList.add('item');
toDoList.append(newToDo);
// 3번째 item 이벤트 발생 중지 stopPropagation()이 상위 엘리먼트로의 이벤트 전파를 막아주는 기능 상위 엘리먼트에서 하위 엘리먼트로 가는 이벤트 전파 또한 막는다.
toDoList.children[2].addEventListener('click', function(e) {e.stopPropagation()});
</script>

추가 내용
e.preventDefault()와 e.stopPropagation()의 차이
e.preventDefault는 고유 동작을 중단시키고,
e.stopPropagation 는 상위 엘리먼트들로의 이벤트 전파를 중단시킨다.
(출처 : https://pa-pico.tistory.com/20)

profile
응미씨

0개의 댓글