JavaScript의 html 요소 목록에 EventListener를 추가하는 방법
const buttons = document.getElementsByTagName("button");
buttons.forEach((item) => {
item.addEventListener("click", function () {
console.log("click");
});
});
위 코드의 문제점은 최종적으로 브라우저 콘솔을 확인할 때 오류가 발생한다는 것입니다. 왜요?
이것은 우리가 버튼 목록을 배열로 취급하고 있기 때문입니다.
배열처럼 보일 수 있지만 실제로는 htmlCollection 또는 nodeList입니다. DOM에서 여러 요소/노드를 가져오는 메서드를 사용할 때마다 해당 메서드는 htmlCollection 또는 nodeList.을 반환합니다.
htmlCollection을 반환하는 메서드에는 다음이 포함됩니다. document.getElementsByClassName(), document.getElementsByTagName()
nodeList를 반환하는 메서드는 다음과 같습니다. document.querySelectorAll(), document.getElementsByName()
이 문제를 해결하는 방법?
이 문제를 해결하려면 htmlCollection/nodeList를 배열로 변환하기만 하면 됩니다. 이렇게 하면 배열 메서드를 사용할 수 있고 이벤트 리스너도 추가할 수 있습니다.
htmlCollection/nodeList를 배열로 변환하기 위해 원하는 방법을 사용할 수 있지만 배열로 변환하는 가장 좋아하는 방법은 spread operator을 사용하는 것입니다.
스프레드 연산자를 사용하여 위의 코드를 다시 작성하면 다음과 같습니다.
const buttons = document.getElementsByTagName("button");
const buttonsArray = [...buttons];
buttonsArray.forEach((item) => {
item.addEventListener("click", function () {
console.log("click");
});
});
이제 브라우저 콘솔로 이동하면 모든 것이 예상대로 작동합니다.
Reference
이 문제에 관하여(JavaScript의 html 요소 목록에 EventListener를 추가하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/jimajs/how-to-addeventlistener-to-a-list-of-html-elements-in-javascript-1m6n텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)