본문 바로가기
개발 공부/JS, JQuery

자바스크립트 좋아요 및 댓글작성, 댓글창

by momo'sdad 2023. 10. 19.

● 좋아요 및 댓글작성, 댓글창

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
</head>
<body>
    <button id='like'>좋아요</button>
    <span>0</span>
    <br>
    <input type="text">
    <button class='writeCom'>댓글작성</button>
    <br>
    <div id="com">
        <p>첫댓글<button class='removeCom'>삭제</button></p>
    </div>
    <script>
        // 1,2 => on('click')사용
        // 1. '좋아요' 버튼을 눌렀을 때, 0->1 / 좋아요 -> 좋아요 취소
        //      => id를 dislike로 변경
        // 2. '좋아요 취소' 버튼을 눌렀을 때, 1-> 0 / 좋아요 취소 -> 좋아요
        //      => id를 like로 변경
        // 3. 댓글을 작성
        // 내가 적은 댓글 + 삭제버튼
        // 댓글을 작성한 후 => input창은 비워줄것!
        // 삭제 버튼 => 내가 삭제한 '그 댓글'만 지워줄 것!

        $(document).on('click','#like',function(){
            //좋아요 0->1
            $('span').text('1')
            //좋아요 -> 좋아요 취소 (ex03->3번)
            $(this).text('좋아요 취소')
            //id라는 속성삭제
            $(this).removeAttr('id')
            //버튼에 dislike라는 id부여
            $(this).attr('id','dislike')
        })
        
        $(document).on('click','#dislike',function(){
            //좋아요 1->0
            $('span').text('0')
            //좋아요 -> 좋아요 취소 (ex03->3번)
            $(this).text('좋아요')
            // id라는 속성삭제
            $(this).removeAttr('id')
            //버튼에 dislike라는 id부여
            $(this).attr('id','like')
        })

        $('.writeCom').click(()=>{
            let com = $('input[type=text]').val()
            $('#com').prepend("<p>"+com+"<button class='removeCom'>삭제</button></p>")
            $('input[type=text]').val("")
        })
        
        $(document).on('click','.removeCom',function(){
            $(this).parent().remove()
        })

    </script>
</body>
</html>

<head> 부분

<script src="https://code.jquery.com/jquery-3.6.0.min.js"> # jQuery를 사용하겠다고 선언

<body> 부분

<button id='like'>좋아요</button>

<span>0</span>

<br>

<input type="text">

<button class='writeCom'>댓글작성</button>

<br>

<div id="com">

<p>첫댓글<button class='removeCom'>삭제</button></p>

</div>

.click vs .on('click')

동적 이벤트 바인딩 차이

.click : 최초의 페이지를 로딩할 때 선언되어있던

요소들에 이벤트를 바인딩 그 이후 더이상 바인딩하지 않음

on('click'): 동적으로 추가된 태그 이벤트 바인딩

1. '좋아요' 버튼을 눌렀을 때, 0->1 / 좋아요 -> 좋아요 취소

=> id를 dislike로 변경

$(document).on('click','#like',function(){ # document에서 #like라는 id의 button를 클릭했을 때

//좋아요 0->1

$('span').text('1') # span태그를 1로 변경

//좋아요 -> 좋아요 취소 (ex03->3번)

$(this).text('좋아요 취소') # 위에서 실행한 #like라는 id의 좋아요를 좋아요 취소로 변경

//id라는 속성삭제

$().removeAttr() # id의 속성을 제거한다.

//버튼에 dislike라는 id부여

$(this).attr('id','dislike') # 다시 이 버튼에 id에 dislike라는 속성을 준다.

})

결과)

2. '좋아요 취소' 버튼을 눌렀을 때, 1-> 0 / 좋아요 취소 -> 좋아요

=> id를 like로 변경

$(document).on('click','#dislike',function(){ # document에서 #disike라는 id의 button를 클릭했을 때

//좋아요 1->0

$('span').text('0') # span태그를 0으로 변경

//좋아요 -> 좋아요 취소 (ex03->3번)

$(this).text('좋아요') # 위에서 실행한 #dislike라는 id의 좋아요 취소를 좋아요로 변경

// id라는 속성삭제

$(this).removeAttr('id') # id의 속성을 제거한다.

//버튼에 dislike라는 id부여

$(this).attr('id','like') # 다시 이 버튼에 id에 like라는 속성을 준다.

})

결과)

3. 댓글을 작성

내가 적은 댓글 + 삭제버튼

댓글을 작성한 후 => input창은 비워줄것!

삭제 버튼 => 내가 삭제한 '그 댓글'만 지워줄 것!

$('.writeCom').click(()=>{ # writeCom class의 버튼을 눌렀을때

let com = $('input[type=text]').val() # [type=text]인 input 요소의 값을 변수 com에 저장

$('#com').prepend("<p>"+com+"<button class='removeCom'>삭제</button></p>")

# com class의 앞에 변수 com에 저장된 input 값뒤에 class가 removeCom인 class "삭제"버튼을 추가

$('input[type=text]').val("") # 댓글을 작성한 후 input창은 비워줌 -> ("")!

})

 

$(document).on('click','.removeCom',function(){ # removeCom이라는 class를 눌렀을때

$(this).parent().remove() # removeCom class의 버튼의 부모를 삭제함

})

반응형