반응형
- 댓글 삭제 기능
del() : 글 삭제하는 함수. alert창을 띄우고 확인을 누르면 글을 삭제함.
댓글을 삭제하면 화면에서 사라지지만, 실제로 데이터에서는 남아있음.
$(".commentDelete").click() : "댓글 삭제"버튼을 클릭했을 때 동작하는 함수
- 댓글 수정 기능
update() : 글 수정을 확인하는 함수. 수정을 누르면 수정할거냐는 alert이 뜨고 확인을 누르면 댓글 창이 다시 열리면서 수정할 수 있게 변함.
하지만 아직 수정되는 기능은 구현하지 않음.
$(".commentEdit").click() : "댓글 수정"버튼을 클릭했을 때 동작하는 함수.
- 댓글 글자수 제한
$("commentcontent").keyup() : 글자수가 100자 이상 넘어가면 alert이 뜨도록.
detail.jsp
<script type="text/javascript">
function del(){var ch = confirm("글을 삭제하시겠습니까?");if(ch){location.href="./delete?no=${detail.no }";}}
function update(){if(confirm("수정하시겠습니까?")){location.href="./update?no=${detail.no }";}}
//function commentDel(cno){if(confirm("댓글을 삭제하시겠습니까?")){location.href='./commentDel?no=${detail.no}&cno='+cno;}}
$(document).ready(function(){
$(".commentEdit").click(function(){
if(confirm('수정하시겠습니까?')){
// 필요한 cno값 잡기 & 수정한 내용 + 로그인 == 서블릿에서 정리
let cno = $(this).siblings(".cno").val();
let comment = $(this).parents(".chead").next();
$(this).prev().hide();
$(this).hide();
comment.css('height', '110');
comment.css('padding-top', '10px');
comment.css('backgroundColor', '#FFD8E0');
let commentChange = comment.html().replaceAll("<br>", "\r\n");
// alert(cno + " : " + commentChange);
let recommentBox = '<div class="recommentBox">';
recommentBox += '<form action="./cedit" method="post">';
recommentBox += '<textarea class="commentcontent" name="comment">' + commentChange + '</textarea>';
recommentBox += '<input type="hidden" name="cno" value="' + cno + '">';
recommentBox += '<button class="comment-btn" type="submit">댓글 수정</button>';
recommentBox += '</form></div>';
comment.html(recommentBox);
}
});
//댓글 삭제 버튼을 눌렀습니다.
$(".commentDelete").click(function(){
// alert("삭제버튼을 눌렀습니다");
// 부모객체 찾아가기 = this
// $(this).parent(".cname").css('color', 'green');
// let text = $(this).parent(".cname").text(); //val()? text() html()
// 자식 요소 찾기
// $(this).parent(".cname").children();
// 형제 요소 찾기 .siblings() .prev()바로 이전 .next() 바로 다음
// let cno = $(this).prev().val();
if(confirm("삭제하시겠습니까?")){
// Ajax
let point=$(this).closest(".comment");
$.ajax({
url : './commentDel', //주소
type : 'post', //get, post
dataType : 'text', //수신타입 json
data: {no : cno}, //보낼 값
success:function(result){
//alert("서버에서 온 값 : " + result);
if(result == 1){
// 정상 삭제: this의 부모(.comment)를 찾아서 삭제해야함.
point.remove();
} else {
alert("삭제 불가. 관리자에게 문의하세요!!!!");
}
},
error: function(request, status, error){ // 통신오류
alert("문제 발생?!!???!?!?! 도대체 왜?!?!?");
}
}); // end ajax
}
});
//댓글쓰기 버튼을 누르면 댓글창 나오게 하기 2024-01-24
$(".comment-write").hide();//원래는 ready 바로 아래 두시는 것을 추천....
$(".xi-comment-o").click(function(){
$(".xi-comment-o").hide();
//$(".comment-write").show();
$(".comment-write").slideToggle('slow');
});
+
$("#comment-button").click(function(){
let content = $("#commentcontent").val();
let bno = ${detail.no };
if(content.length < 5){
alert("댓글은 다섯글자 이상으로 적어주세요.");
$("#commentcontent").focus();
} else {
let form = $('<form></form>');
form.attr('name', 'form');
form.attr('method', 'post');
form.attr('action', './comment');
form.append($('<input/>', {type:'hidden', name:'commentcontent', value:content}));//json
form.append($('<input/>', {type:'hidden', name:'bno', value:bno}));
form.appendTo("body");
form.submit();
}
});//댓글쓰기 동적생성 끝
//id="commentcontent"
//id="comment-btn"
//댓글쓰기 창에 쓸 수 있는 글자 표시해주고 넘어가면 더이상 입력 불가로 바꾸기
$("#commentcontent").keyup(function(){
let text = $(this).val();
if(text.length > 100){
alert("100자 넘었으니 그만쓰세요^^!");
$(this).val( text.substr(0, 100) );
}
$("#comment-btn").text("글쓰기 " + text.length + "/100");
});
});
});
</script>
detail.jsp
<!-- 2024-01-22 댓글쓰는 창 만들기 (댓글 작성자, 댓글 내용) -->
<div class="comment-write">
<div class="comment-form"> <!-- form태그 필요없음. 위에서 동작가능 -->
<textarea id="commentcontent" name="commentcontent"></textarea>
<button id="comment-button" id="list_button">댓글쓰기</button>
</div>
</div>
</c:if>
commentDel.java
doPost에 추가
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 세션 가져오기
HttpSession session = request.getSession();
// 작업 결과를 저장할 변수를 초기화하기
int result = 0;
// 만약 사용자가 로그인된 상태라면
if(session.getAttribute("mid") != null && Util.intCheck2(request.getParameter("no"))) {
// 조건이 충족되면 commentDTO를 생성하고 속성을 설정함
CommentDTO dto = new CommentDTO();
dto.setMid((String)session.getAttribute("mid")); // mid가져와서 Mid에 저장해
dto.setCno(Util.str2Int2(request.getParameter("no"))); // no 정수 변환 후 Cno에 저장해
// CommentDAO의 인스턴스 생성
CommentDAO dao = new CommentDAO();
// commentDelete 메소드 호출하과 DTO에 전달 -> 결과 'result' 변수에 저장
result = dao.commentDelete(dto);
}
PrintWriter pw = response.getWriter();
pw.print(result);
}
반응형
'개발 공부 Today I Learned' 카테고리의 다른 글
[국비 48일차 TIL] 관리자 페이지 설정 member, admin (1) | 2024.01.26 |
---|---|
[국비 47일차 TIL] 댓글 수정버튼 눌렀을 때 (0) | 2024.01.25 |
[국비 45일차 TIL] 방문 흔척 찾기, 게시글에 로그인 ip 추가 (0) | 2024.01.23 |
[국비 44일차 TIL] 댓글 삭제 오류 해결 (HeidiSQL 쿼리문 수정) (1) | 2024.01.23 |
[국비 43일차 TIL] 게시판 댓글 작성, 삭제 (0) | 2024.01.22 |
댓글