더북(TheBook)

현재 코드에는 td 태그마다 클릭 이벤트 리스너가 달려 있습니다. 나중에 이벤트 리스너를 제거할 상황이 생기면 이벤트 리스너 9개를 일일이 제거해야 합니다. 이벤트 리스너를 한 번에 달고 제거할 수 있으면 좋겠죠? 코드를 다음과 같이 수정합니다. td 태그에서 이벤트를 제거하고 table 태그에 이벤트를 연결합니다.

for (let i = 1; i <= 3; i++) {
  const $tr = document.createElement('tr'); 
  const cells = [];
  for (let j = 1; j <= 3; j++) {
    const $td = document.createElement('td'); 
    cells.push($td);
    $tr.appendChild($td);
  }
  rows.push(cells);
  $table.appendChild($tr);
  $table.addEventListener('click', callback);
}

기존과 결과가 같습니다. td를 클릭할 때 table에도 click 이벤트가 발생합니다. 자식 태그에 이벤트가 발생할 때 부모 태그에도 동일한 이벤트가 발생하는 현상인 이벤트 버블링 때문입니다. 기억나지 않는다면 4.3.4 이벤트 버블링과 캡처링을 참고해 주세요.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.