오늘은 게시물을 수정 기능을 구현해보자!
파일 목록
📦Board
┣ 📂board
┃┣ 📜list.html
┃ ┣ 📜modify.html
┃ ┣ 📜view.html
┃ ┗ 📜write.html
┣ 📂public
┃ ┗ 📂js
┃ ┃ ┣ 📜list.js
┃ ┃ ┣ 📜modify.js
┃ ┃ ┣ 📜view.js
┃ ┃ ┗ 📜write.js
┗ 📜index.html
구현
구현해야 할 사항은 크게 다음과 같다.
게시물 작성하기 (Create)리스트로 게시물 보여주기 (Read)게시물 클릭 시 해당 게시물 보여주기 (Read)- 게시물 수정하기 (Update)
- 게시물 삭제하기 (Delete)
게시판 구현하기
게시판 구조
게시물 수정하기 (Update)
# public/js/view.js
먼저 view 페이지에서 수정 버튼을 누르면 modify 페이지로 이동하도록 만들어 보자!
클릭 이벤트를 걸 요소를 선택해보자!
const boardsStr = localStorage.getItem("boards");
const boardsObj = JSON.parse(boardsStr);
const idx = location.search;
const index = idx.split("=")[1];
const board = boardsObj[index];
const beforeUrl = document.referrer;
const viewCount = (beforeUrl) => {
if (beforeUrl.split("/").pop() === "list.html") {
board.views++;
const viewCountStr = JSON.stringify(boardsObj);
localStorage.setItem("boards", viewCountStr);
}
};
viewCount(beforeUrl);
const viewFrm = document.querySelectorAll("#viewFrm > div");
for (let i = 0; i < viewFrm.length; i++) {
const id = viewFrm[i].id;
viewFrm[i].innerHTML += " " + board[id];
}
const modifyBtn = document.querySelector("#modify");
console.log(modifyBtn);
수정 버튼에 클릭 이벤트를 걸어주고 확인을 해보자!
const boardsStr = localStorage.getItem("boards");
const boardsObj = JSON.parse(boardsStr);
const idx = location.search;
const index = idx.split("=")[1];
const board = boardsObj[index];
const beforeUrl = document.referrer;
const viewCount = (beforeUrl) => {
if (beforeUrl.split("/").pop() === "list.html") {
board.views++;
const viewCountStr = JSON.stringify(boardsObj);
localStorage.setItem("boards", viewCountStr);
}
};
viewCount(beforeUrl);
const viewFrm = document.querySelectorAll("#viewFrm > div");
for (let i = 0; i < viewFrm.length; i++) {
const id = viewFrm[i].id;
viewFrm[i].innerHTML += " " + board[id];
}
const modifyBtn = document.querySelector("#modify");
const modifyBtnHandler = (e) => {
console.log("수정");
};
modifyBtn.addEventListener("click", modifyBtnHandler);
다음과 같이 modify 페이지로 이동시켜줄 때 매개변수로 index라는 키와 게시글의 index 번호를 넘겨준다.
const boardsStr = localStorage.getItem("boards");
const boardsObj = JSON.parse(boardsStr);
const idx = location.search;
const index = idx.split("=")[1];
const board = boardsObj[index];
const beforeUrl = document.referrer;
const viewCount = (beforeUrl) => {
if (beforeUrl.split("/").pop() === "list.html") {
board.views++;
const viewCountStr = JSON.stringify(boardsObj);
localStorage.setItem("boards", viewCountStr);
}
};
viewCount(beforeUrl);
const viewFrm = document.querySelectorAll("#viewFrm > div");
for (let i = 0; i < viewFrm.length; i++) {
const id = viewFrm[i].id;
viewFrm[i].innerHTML += " " + board[id];
}
const modifyBtn = document.querySelector("#modify");
const modifyBtnHandler = (e) => {
location = "/board/modify.html" + idx;
};
modifyBtn.addEventListener("click", modifyBtnHandler);
이제 modify 페이지로 이동해서 작업을 진행한다.
# public/js/modify.js
modify 페이지는 write 페이지와 view 페이지가 합쳐진 페이지라 볼 수 있다.
submit 이벤트를 걸기 위한 요소를 선택한다.
그리고 데이터가 들어갈 위치인 modifyFrm > div 요소들 선택해 준다.
const modifyFrm = document.querySelector("#modifyFrm");
const modifyFrmList = document.querySelectorAll("#modifyFrm > div");
console.log(modifyFrm);
console.log(modifyFrmList);
modify 페이지에 수정 완료 버튼에 submit 이벤트를 걸어준다.
submit의 기본 이벤트를 막아주고 이벤트가 잘 작동하는지 출력해본다.
const modifyFrm = document.querySelector("#modifyFrm");
const modifyFrmList = document.querySelectorAll("#modifyFrm > div");
const modifyHandler = (e) => {
e.preventDefault();
console.log("Hello");
};
modifyFrm.addEventListener("submit", modifyHandler);
boards 데이터를 가져온다.
const modifyFrm = document.querySelector("#modifyFrm");
const modifyFrmList = document.querySelectorAll("#modifyFrm > div");
const boardsObj = JSON.parse(localStorage.getItem("boards"));
console.log(boardsObj);
const modifyHandler = (e) => {
e.preventDefault();
};
modifyFrm.addEventListener("submit", modifyHandler);
location.search를 이용해 이전 페이지에서 넘겨준 인덱스를 받아온다.
인덱스를 이용해 수정하려는 데이터를 확인해보자!
const modifyFrm = document.querySelector("#modifyFrm");
const modifyFrmList = document.querySelectorAll("#modifyFrm > div");
const idx = location.search;
console.log(idx);
const index = location.search.split("=")[1];
console.log(index);
const boardsObj = JSON.parse(localStorage.getItem("boards"));
const board = boardsObj[index];
console.log(board);
const modifyHandler = (e) => {
e.preventDefault();
};
modifyFrm.addEventListener("submit", modifyHandler);
수정하기 전 데이터가 미리 들어가야 할 위치를 찾아보자!
const modifyFrm = document.querySelector("#modifyFrm");
const modifyFrmList = document.querySelectorAll("#modifyFrm > div");
const idx = location.search;
const index = location.search.split("=")[1];
const boardsObj = JSON.parse(localStorage.getItem("boards"));
const board = boardsObj[index];
for (let i = 0; i < modifyFrmList.length; i++) {
const element = modifyFrmList[i].childNodes;
console.log(element);
}
const modifyHandler = (e) => {
e.preventDefault();
};
modifyFrm.addEventListener("submit", modifyHandler);
찾은 위치에 수정하기 전 데이터를 넣어보자!
const modifyFrm = document.querySelector("#modifyFrm");
const modifyFrmList = document.querySelectorAll("#modifyFrm > div");
const idx = location.search;
const index = location.search.split("=")[1];
const boardsObj = JSON.parse(localStorage.getItem("boards"));
const board = boardsObj[index];
console.log(boardsObj[index]);
for (let i = 0; i < modifyFrmList.length; i++) {
const element = modifyFrmList[i].childNodes[1];
const id = element.name;
element.value = board[id];
}
const modifyHandler = (e) => {
e.preventDefault();
};
modifyFrm.addEventListener("submit", modifyHandler);
글을 작성하고 수정완료를 눌렀을 때 input 박스와 textarea의 값들을 가져와보자!
const modifyFrm = document.querySelector("#modifyFrm");
const modifyFrmList = document.querySelectorAll("#modifyFrm > div");
const idx = location.search;
const index = location.search.split("=")[1];
const boardsObj = JSON.parse(localStorage.getItem("boards"));
const board = boardsObj[index];
for (let i = 0; i < modifyFrmList.length; i++) {
const element = modifyFrmList[i].childNodes[1];
const id = element.name;
element.value = board[id];
}
const modifyHandler = (e) => {
e.preventDefault();
const subject = e.target.subject.value;
const writer = e.target.writer.value;
const content = e.target.content.value;
console.log(subject, writer, content);
};
modifyFrm.addEventListener("submit", modifyHandler);
값들을 저장하기 이전에 빈 값이 있는지 체크하는 함수를 만들어 보자!
const modifyFrm = document.querySelector("#modifyFrm");
const modifyFrmList = document.querySelectorAll("#modifyFrm > div");
const idx = location.search;
const index = location.search.split("=")[1];
const boardsObj = JSON.parse(localStorage.getItem("boards"));
const board = boardsObj[index];
for (let i = 0; i < modifyFrmList.length; i++) {
const element = modifyFrmList[i].childNodes[1];
const id = element.name;
element.value = board[id];
}
const isEmpty = (subject, writer, content) => {
if (subject.length === 0) throw new Error("제목을 입력해주세요");
if (writer.length === 0) throw new Error("작성자를 입력해주세요");
if (content.length === 0) throw new Error("내용을 입력해주세요");
};
const modifyHandler = (e) => {
e.preventDefault();
const subject = e.target.subject.value;
const writer = e.target.writer.value;
const content = e.target.content.value;
try {
isEmpty(subject, writer, content);
} catch (e) {
alert(e.message);
console.error(e);
}
};
modifyFrm.addEventListener("submit", modifyHandler);
이제 수정한 값을 boards 데이터에 저장하고 view 페이지로 이동할 수 있도록 만들어 보자!
const modifyFrm = document.querySelector("#modifyFrm");
const modifyFrmList = document.querySelectorAll("#modifyFrm > div");
const idx = location.search;
const index = location.search.split("=")[1];
const boardsObj = JSON.parse(localStorage.getItem("boards"));
const board = boardsObj[index];
for (let i = 0; i < modifyFrmList.length; i++) {
const element = modifyFrmList[i].childNodes[1];
const id = element.name;
element.value = board[id];
}
const isEmpty = (subject, writer, content) => {
if (subject.length === 0) throw new Error("제목을 입력해주세요");
if (writer.length === 0) throw new Error("작성자를 입력해주세요");
if (content.length === 0) throw new Error("내용을 입력해주세요");
};
const modifyHandler = (e) => {
e.preventDefault();
const subject = e.target.subject.value;
const writer = e.target.writer.value;
const content = e.target.content.value;
try {
isEmpty(subject, writer, content);
board.subject = subject;
board.writer = writer;
board.content = content;
const boardsStr = JSON.stringify(boardsObj);
localStorage.setItem("boards", boardsStr);
location.href = "/board/view.html" + idx;
} catch (e) {
alert(e.message);
console.error(e);
}
};
modifyFrm.addEventListener("submit", modifyHandler);
뒤로가기뒤로 가기 버튼을 구현하기 전에 뒤로 가기 부분부터 선택해보자!
const modifyFrm = document.querySelector("#modifyFrm");
const modifyFrmList = document.querySelectorAll("#modifyFrm > div");
const idx = location.search;
const index = location.search.split("=")[1];
const boardsObj = JSON.parse(localStorage.getItem("boards"));
const board = boardsObj[index];
for (let i = 0; i < modifyFrmList.length; i++) {
const element = modifyFrmList[i].childNodes[1];
const id = element.name;
element.value = board[id];
}
const isEmpty = (subject, writer, content) => {
if (subject.length === 0) throw new Error("제목을 입력해주세요");
if (writer.length === 0) throw new Error("작성자를 입력해주세요");
if (content.length === 0) throw new Error("내용을 입력해주세요");
};
const modifyHandler = (e) => {
e.preventDefault();
const subject = e.target.subject.value;
const writer = e.target.writer.value;
const content = e.target.content.value;
try {
isEmpty(subject, writer, content);
board.subject = subject;
board.writer = writer;
board.content = content;
const boardsStr = JSON.stringify(boardsObj);
localStorage.setItem("boards", boardsStr);
location.href = "/board/view.html" + idx;
} catch (e) {
alert(e.message);
console.error(e);
}
};
const backBtn = document.querySelector("#back");
console.log(backBtn);
modifyFrm.addEventListener("submit", modifyHandler);
선택한 뒤로가기 버튼에 이벤트를 걸어서 이전 페이지로 이동할 수 있도록 해보자!
const modifyFrm = document.querySelector("#modifyFrm");
const modifyFrmList = document.querySelectorAll("#modifyFrm > div");
const idx = location.search;
const index = location.search.split("=")[1];
const boardsObj = JSON.parse(localStorage.getItem("boards"));
const board = boardsObj[index];
for (let i = 0; i < modifyFrmList.length; i++) {
const element = modifyFrmList[i].childNodes[1];
const id = element.name;
element.value = board[id];
}
const isEmpty = (subject, writer, content) => {
if (subject.length === 0) throw new Error("제목을 입력해주세요");
if (writer.length === 0) throw new Error("작성자를 입력해주세요");
if (content.length === 0) throw new Error("내용을 입력해주세요");
};
const modifyHandler = (e) => {
e.preventDefault();
const subject = e.target.subject.value;
const writer = e.target.writer.value;
const content = e.target.content.value;
try {
isEmpty(subject, writer, content);
board.subject = subject;
board.writer = writer;
board.content = content;
const boardsStr = JSON.stringify(boardsObj);
localStorage.setItem("boards", boardsStr);
location.href = "/board/view.html" + idx;
} catch (e) {
alert(e.message);
console.error(e);
}
};
const backBtn = document.querySelector("#back");
const backBtnHandler = (e) => {
location.href = document.referrer;
};
modifyFrm.addEventListener("submit", modifyHandler);
backBtn.addEventListener("click", backBtnHandler);
'Javascript' 카테고리의 다른 글
[Javascript] 게시판 구현하기 (CRUD) - 코드 수정 (1) | 2022.11.22 |
---|---|
[Javascript] 게시판 구현하기 (CRUD) - Delete (0) | 2022.11.21 |
[Javascript] 게시판 구현하기 (CRUD) - Read (0) | 2022.11.20 |
[Javascript] 게시판 구현하기 (CRUD) - Create (0) | 2022.11.19 |
[Javascript] 댓글 구현하기 (Create, Read) (2) | 2022.11.16 |