TIL

document.querySelectorAll로 선택한 요소에 addEventListener가 안되는 이유(수정)

브라더 코드 2021. 9. 9. 10:54

document.querySelectorAll은 NodeCollection을 반환하기 때문이다.

(반대로 document.querySelector는 단일 DOM 객체를 반환한다)
NodeCollection은 숫자 인덱스가 있고 길이 속성을 갖고 있지만, 배열은 아니므로 forEach등의 함수를 호출할 수 없다.

따라서 반복문 또는 forEach를 통해 DOM요소 하나하나에 AddEventListener를 적용해야 한다 

let selectAll = document.querySelectorAll("input[name='example']")

// [X]
selectAll.addEventListener('change', ()=>{...}); 

// [O]
for(let i=0; i<selectAll.length; i++) {
	selectAll[i].addEventListener('change', ()=>{...});
}

// [O]
selectAll.forEach(i => i.addEventListener('change', ()=>{...});