"addEventListener is not a function Error" in JS

이현정·2022년 6월 30일
0

에러 탐험기

목록 보기
3/4

발견

html 에서 getElementByClassName() 으로 요소를 가져왔는데
addEventListener is not a function Error 라는 에러가 떴다.

아래는 문제의 코드.

원인

getElementsByClassName() 를 사용해서 가져온 요소는 배열이다.

해결

1) 그래서 getElementsByClassName() 로 가져온 요소에 addEventListenr 를 추가하려면 배열[index] 표시를 아래와 같이 해주거나,

const boxes = document.getElementsByClassName('box');
console.log(boxes); // 👉️ [div.box, div.box, div.box]

// ✅ addEventListener to first box
boxes[0].addEventListener('click', function onClick() {
  console.log('box clicked');
});

// ✅ addEventListener to all boxes
for (const box of boxes) {
  box.addEventListener('click', function onClick() {
    console.log('box clicked');
  });
}

(코드 출처)

2) querySelector()를 이용한다. getElementsByClassName()은 오류 나면서 querySelector()가 되는 이유는, getElementsByClassName() 는 배열을 반환하지만, querySelector()는 요소 하나만을 반환하기 때문이다.

1개의 댓글

comment-user-thumbnail
2022년 7월 20일

getElementsByClassName 의 반환값은 정확하게는 배열은 아니고 유사배열객체(HTMLCollection)입니다 😄

유사배열객체도 iterator-iterable 프로토콜을 구현하고 있기 때문에 for-of 문이나 전개연산자가 사용가능하지만,
HTMLCollection 은 forEach 등의 Array.prototype의 메서드는 구현하고 있지 않기 때문에 배열과는 차이점이 있어요 👍🏻

https://developer.mozilla.org/en-US/docs/Web/API/Document/getElementsByClassName#return_value

답글 달기