본문 바로가기
JavaScript

[JavaScript] 반복되는 모든 버튼에 이벤트 리스너를 등록하기

by Yeoseungwon 2023. 7. 31.
728x90

 

<div class="textarea-box">
     <p id="detailIndex" style="display: none" th:text="${plan.index}"></p>
     <textarea id="textareaValue" th:text="${plan.memo}">memo</textarea>
     <button id="textareaBtn" type="button">저장</button>
</div>

여러 개의 .textarea-box 클래스가 있는 경우, querySelector() 메서드는 문서 내에서 첫 번째 .textarea-box 요소만 선택하게 됩니다. 따라서 첫 번째 버튼에만 이벤트 리스너가 등록되는 것입니다.

모든 버튼에 이벤트 리스너를 등록하려면 .textarea-box 클래스를 가진 모든 요소를 선택한 후에 각각의 요소에 이벤트 리스너를 등록해야 합니다. 이를 위해서 querySelectorAll() 메서드를 사용하여 모든 .textarea-box 클래스를 가진 요소를 선택하고, 각 요소에 대해 반복문을 사용하여 이벤트 리스너를 등록해야 합니다.

아래는 모든 .textarea-box 클래스를 가진 요소에 대해 이벤트 리스너를 등록하는 코드입니다.

 

 

const textareaBoxes = document.querySelectorAll('.textarea-box');

textareaBoxes.forEach(textareaBox => {
    const textareaBtn = textareaBox.querySelector('#textareaBtn');

    textareaBtn.addEventListener("click", function () {
        const detailIndex = textareaBox.querySelector('#detailIndex').textContent;
        const textareaValue = textareaBox.querySelector('#textareaValue').value;

        const xhr = new XMLHttpRequest();
        const formData = new FormData();
        formData.append("index", detailIndex);
        formData.append("patchMemo", textareaValue);

        xhr.open('PATCH', `/memo`);
        xhr.onreadystatechange = () => {
            if (xhr.readyState === XMLHttpRequest.DONE) {
                if (xhr.status >= 200 && xhr.status < 300) {
                    alert('업데이트 성공');
                } else {
                    alert('업데이트 실패');
                }
            }
        };
        xhr.send(formData);
        console.log('변경할 인덱스 번호 : ' + detailIndex);
        console.log('변경할 메모 내용 : ' + textareaValue);
    })

});
728x90

'JavaScript' 카테고리의 다른 글

[Swiper] 라이브러리 포커스이동  (0) 2023.11.17
[JavaScript] onkeydown  (0) 2023.10.24
[JavaScript] onkeydown  (0) 2023.10.24
[JS] 콜백함수 정리  (1) 2023.06.29
[JS] XMLHttpRequest  (0) 2023.06.18