뇌절에 뇌절을 거듭하는 것 같지만(ㅋㅋㅋ) 또 이 화면이다.
원래 기획안에는 '수정'버튼이 없었지만, ajax로 한번 만들어보기로했다. 내가 만든건 리뷰
지만, 사실 만들고 나니 댓글
기능과 다를 바 없다...ㅋㅋㅋ
아놔 진짜 프론트 개발자님들 존경한다. 어떻게 노드를 하나하나 다 찾아서 또 새롭게 만들어내고....진짜 미치는 줄; 이는 밑에 가서 무슨 말인지 다시 설명하겠다.
아 놔. 이번 세미프로젝트 하길 정말 잘했다. 나는 ajax에 정말 약하다! 한 함수 내에서 ajax를 두번 호출하니, 어쩔 때는 두 ajax가 한번에 다 실행되고 어쩔땐 첫 번째 ajax만 호출되는 기이한 현상이; 벌어졌다. 구글링 해보니 비슷한 사례가 많은 것 같아 이를 방지하는 방법을 찾아냈다.
이는 리뷰 수정
버튼을 눌렀을 때 일어나는 일들을 풀어낸 코드다.
//리뷰 수정 버튼 클릭
$(document).on('click', '#bt', function(e) {
console.log('성공');
//원래 적혀있던 리뷰 텍스트 내용 불러와 변수에 저장해놓기
var val = this.parentNode.childNodes[3].childNodes[3].innerText;
//그리고 원래 댓글이 적혀있는 부분을 비워버리고
this.parentNode.childNodes[3].childNodes[3].innerText= "";
//비워버린 곳에 댓글 입력 창을 만든다. + 댓글 입력창에 원래 댓글 내용을 띄워 수정할 부분만 골라 수정할 수 있게 한다.
this.parentNode.childNodes[3].childNodes[3].innerHTML='<textarea cols="10" rows="10" name="review_content">'+val+'</textarea>';
//수정 완료 버튼을 만든다.
this.parentNode.childNodes[3].childNodes[3].innerHTML += '<button id="revModify"> 수정완료 </button>';
this.innerHTML= "";
this.parentNode.childNodes[5].remove();
});
//위 코드에서 동적으로 생기게 만든 '리뷰 수정'버튼을 누르면 생기는 일
$(document).on('click', '#revModify', function(e) {
//해당 리뷰의 reivew_no을 불러와 저장한다.
var review_no = this.parentNode.nextSibling.nextSibling.value;
//수정된 리뷰 내용값을 저장한다.
var review_content = this.previousSibling.value;
$.ajax({
type: "GET",
url: "/review/modify?review_no="+review_no+"&review_content="+review_content,
datatype: "html",
async:false,
success: function(data) {
console.log("DB상 수정 완료");
}
})
var hotel_no = <%=hotelDetail.getHotel_no() %>
var selectedOption = this.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.childNodes[1].childNodes[3].value
$.ajax({
type: "GET",
url: "/review/list?hotel_no="+hotel_no+"&selectedOption="+selectedOption,
datatype: "html",
async:false,
success: function(data) {
$("#result").html(data);
console.log('프론트 바꾸기도 성공');
}
})
});
여기서 헤맸던 점.
첫 번재 ajax가 실행되고 두 번째 ajax는 10번 중 3번 꼴로 실행되지 않았다. 이유가 뭘까...하다가 알아낸 해결방법
async:false,
이거다. 이 문구를 ajax 문구에 추가하면 꼬이지않고 첫번째 ajax, 두번째 ajax 코드 모두 실행된다!
js에 약한 내가 node를 하나한 찾아내고 그 node에 새로운 노드를 넣는 방법을 1시간만에 터득하게 해준 대단한 블로그다.
해당 링크를 따라가면 부모,자식,형제 노드 찾기를 쉽게 배울 수 있다.
댓글 수정 버튼을 누르면 기존의 댓글 내용이 사라지고 그 영역에 textarea가 대체되야 한다. 그러려면 div내용을 모두 지워야한다. 그럴 때 도움을 줬던 블로그 글
--딱히 자료는 없음...--
node에는 공백도 포함되기 때문에 #text는 공백을 나타내는 것 같다. 그래서 그 다음 node로 옮겨가서 찾으면 찾고자하는 node가 나올 것이다.