본문 바로가기
TIL,WIL

수정버튼만 만들면 된다

by GREEN나무 2024. 11. 1.
728x90

현재

>오류1 : 수정버튼 기능 구현하기

성공


시도

card.js에서 선택 회원정보를 디폴트로 addcard.html을 불러오기

                    $(document).on("click", "button[name='delete']", async function () {
                        //'members'에서 회원 ID 가져오기
                        // Firestore의 "members" 컬렉션에서 모든 문서를 가져옵니다.
                        const membersSnapshot = await getDocs(collection(db, "members"));                    
                        // 가져온 문서 각각에 대해 ID와 데이터를 콘솔에 출력하고 일치하는 문서를 삭제합니다.
                        membersSnapshot.forEach(async (doc) => {
                            const row = doc.data(); //'row'가 해당 문서의 id
                            const name = row['name'];                    
                            // name 필드가 data.name과 일치하는 경우
                            if (name === data.name) {
                                localStorage.setItem('selectedMemberId', row);// localStorage에 회원 ID 저장
                                // addcard.html이 상위 폴더에 있을 때 경로 지정
                                window.location.href = '../addcard.html';
                            }else{
                                alert("수정페이지로 이동 실패")
                            }
                        });
                    })

 

오류발생 : 'revise'버튼이 기능을 안됨.

Uncaught TypeError: reviseBtn is not a function
    at HTMLButtonElement.onclick (index.html:1:1)
onclick @ index.html:1Understand this errorAI

 

... 오타수정. (함수에 이름 'riviseBtn'으로 수정)

 

페이지 이동은 하는데 빈칸으로 이동됨

아... 데이터 반영하는걸 빼먹음

◆ 선택한 회원정보 디폴트값으로 받아오기

다른 js파일에서 변수 가져오기

 

//cardModal.js

                    $(document).on("click", "button[name='reviseBtn']", async function () {
                        //'members'에서 회원 ID 가져오기
                        // Firestore의 "members" 컬렉션에서 모든 문서를 가져옵니다.
                        const membersSnapshot = await getDocs(collection(db, "members"));                    
                        // 가져온 문서 각각에 대해 ID와 데이터를 콘솔에 출력하고 일치하는 문서를 삭제합니다.
                        membersSnapshot.forEach(async (doc) => {
                            const row = doc.data(); //'row'가 해당 문서의 id
                            const name = row['name'];                    
                            // name 필드가 data.name과 일치하는 경우
                            if (name === data.name) {
                                localStorage.setItem('selectedMemberName', row.name);// localStorage에 회원 ID 저장
                                // addcard.html이 상위 폴더에 있을 때 경로 지정
                                window.location.href = `../addcard.html?name=${encodeURIComponent(selectedMemberName)}`;
                                 // 이름을 URL 파라미터로 전달;
                            }else{
                                console.log("이름 다름")
                            }
                        });
                    })

/////////////////////////////////////////////////////////////////
// addcard.js
// 모달 수정했습니다
const nameParam = getQueryParam('selectedMemberName');
let documentId = null; // Firebase 문서ID

// 파라미터 name 값이 존재할 경우, 해당 값으로 데이터 가져오기
if (nameParam) {

 

오류발생

cardmodal.js:209 Uncaught (in promise) ReferenceError: selectedMemberName is not defined
    at cardmodal.js:209:99
    at index.esm2017.js:20411:52
    at index.esm2017.js:14944:33
    at Bi.inorderTraversal (index.esm2017.js:2512:87)
    at Pi.inorderTraversal (index.esm2017.js:2419:14)
    at Nd.forEach (index.esm2017.js:14944:9)
    at np.forEach (index.esm2017.js:20411:35)
    at HTMLButtonElement.<anonymous> (cardmodal.js:202:41)

 

아 바보.. 이름을 그대로 보내면 되잖아. id 필요없어...

◆ 다른 .js 파일로 이름 보내기 - URL 형태로 보내

//modal.js
// 수정 버튼 클릭 이벤트
$modalModi.click(function () {
    localStorage.setItem('name', $modalName.text()); //.js
    window.location.href = `addcard.html?name=${$modalName.text()}`;
});

////////////////////////
// addCard.ks
// url에서 name 파라미터 가져오기
function getQueryParam(param) {
    const urlParams = new URLSearchParams(window.location.search);
    return urlParams.get(param);
}

const nameParam = getQueryParam('name');
let documentId = null; // Firebase 문서ID

// 파라미터 name 값이 존재할 경우 해당 값으로 데이터 가져오기
if (nameParam) {
    $(document).ready(async function () { ...

됨. 성공


기억할 것

◆ window.location.href 속성을 이용해 새로운 URL로 이동하기

데이터를 페이지 간에 URL 쿼리 파라미터로 전달하는 방식입니다.

window.location.href = addcard.html?name=${$modalName.text()}; // .js

◆ 로컬 스토리지에 데이터를 저장하기

$modalName.text() 값이 name이라는 키로 로컬 스토리지에 저장됩니다.

이후에 다른 페이지에서 이 값을 불러오려면 localStorage.getItem('name')을 사용하면 됩니다.

localStorage.setItem('name', $modalName.text()); //.js

 

◆다른 페이지에서 회원정보 수정하기

https://fkkmemi.github.io/ff/ff-022/#%ED%94%84%EB%A1%9C%ED%95%84%EC%88%98%EC%A0%95

 

오늘 중요한 것을 정리하면서 기억할 필요가 있는 것 1~2가지

 

삭제, 수정버튼을 만든다고 시간이 오래 걸렸는데 해내서 기분이 좋습니다.

 

// 데이터를 페이지 간에 URL 쿼리 파라미터로 전달하기
window.location.href = addcard.html?name=${$modalName.text()};

// 로컬 스토리지에 데이터를 저장하기
localStorage.setItem('name', $modalName.text());

// 다른 페이지에서 로컬스토리지에 저장된 값을 불러오기
localStorage.getItem('name')

 

'TIL,WIL' 카테고리의 다른 글

2주차 월요일  (0) 2024.11.03
내일배움 Notion.js 7기 1주차 후기  (0) 2024.11.01
카드모달 만들면서 막히는 부분  (5) 2024.10.31
강의 먼저 볼걸  (0) 2024.10.30
멤버소개 모달 만들기, 왕초보 4,5주차 수강  (2) 2024.10.29