댓글창 하나 질문드려요 ㅠㅠㅠ

댓글창 하나 질문드려요 ㅠㅠㅠ

QA

댓글창 하나 질문드려요 ㅠㅠㅠ

본문


function comment_box(comment_id, work)
        {
            
            if(comment_id){
                var btn_rpy = 'btn_reply_' + comment_id;
                var btn_mod = 'btn_mod_' + comment_id;
                
                if(work == 'cu'){
                    console.log('수정열림');
                    document.getElementById(btn_mod).innerHTML = "취소";
                    if(document.getElementById(btn_rpy).innerHTML = "취소"){
                        document.getElementById(btn_rpy).innerHTML = "답변";
                    }
                } else {
                    console.log('답변열림');
                    document.getElementById(btn_rpy).innerHTML = "취소";
 
// 에러나는 구문
                     if(document.getElementById(btn_mod).innerHTML = "취소"){
// 에러나는 구문 끝
                        alert('dd');
                        document.getElementById(btn_mod).innerHTML = "수정";
                    }
                }
                if (c_holder == comment_id && w_holder == work)
                {
                    if(work == 'cu'){
                        console.log('수정닫힘');
                        document.getElementById(btn_mod).innerHTML = "수정";
                    } else {
                        console.log('답변닫힘');
                        document.getElementById(btn_rpy).innerHTML = "답변";
                    }
                    comment_box('','c');
                    return;
                }
            }
            var el_id;

            // 댓글 아이디가 넘어오면 답변, 수정
            if (comment_id)
            {
                if (work == 'c')
                    el_id = 'reply_' + comment_id;
                else
                    el_id = 'edit_' + comment_id;
            }
            else
                el_id = 'bo_vc_w';
            if (save_before != el_id)
            {
                if (save_before)
                {
                    // 하단 원글 댓글폼 유지 코드
                    if (save_before != 'bo_vc_w')
                    {
                        document.getElementById(save_before).style.display = 'none';    // 대댓글 입력시 bo_vc_w display 값 제어 코드
                        document.getElementById(save_before).innerHTML = '';            // 대댓글 입력시 bo_vc_w html 삭제 코드
                    }
                }
                
                document.getElementById(el_id).style.display = '';                    // 원글 댓글 입력폼 display 속성
                document.getElementById(el_id).innerHTML = save_html;                // 댓글 입력폼
                // 댓글 수정
                if (work == 'cu')
                {
                    document.getElementById('wr_content').value = document.getElementById('save_comment_' + comment_id).value;
                    if (typeof char_count != 'undefined')
                        check_byte('wr_content', 'char_count');
                   /* 2018-01-15 원본 주석처리
                    if (document.getElementById('secret_comment_'+comment_id).value)
                        document.getElementById('wr_secret').checked = true;
                    else
                        document.getElementById('wr_secret').checked = false;
                    */
                }
                document.getElementById('comment_id').value = comment_id;
                document.getElementById('w').value = work;
                if(save_before)
                    $("#captcha_reload").trigger("click");
                save_before = el_id;
            }
            c_holder = comment_id;
            w_holder = work;
        }

 

 

//에러나는 구문

//에러나는 구문 끝

사이에 있는 if 조건문이 에러가 나는데요

저 조건이 false인데 왜 오류가 날까요?ㅠ

이 질문에 댓글 쓰기 :

답변 2

null이 존재가능한것을 체크하도록 추가해보세요

 

    if(document.getElementById(btn_mod).innerHTML = "취소"){

의 문장을

변수를 이용해서 변경해봅니다.

 

   var btnMod = document.getElementById(btn_mod).innerHTML;

    if (btnMod && btnMod == "취소"){

 

와 같이 변경해보세요

흡;
마찬가지 입니다.

변수를
var btnMod = document.getElementById(btn_mod).innerHTML; 
이렇게 써주니 innerHTML 치환이 안되서

var btnMod = document.getElementById(btn_mod);
이렇게 변경하였습니다.

근데 오류 문구는 같네요 ㅠ

<ul class="bo_vc_act">
<?php if ($list[$i]['is_reply']) { ?>
<li>
<a href="<?php echo $c_reply_href; ?>" onclick="comment_box('<?php echo $comment_id ?>', 'c'); return false;" id="btn_reply_<?php echo $comment_id; ?>">답변</a>
</li>
<?php } ?>
<?php if ($list[$i]['is_edit']) { ?>
<li>
<a href="<?php echo $c_edit_href; ?>" onclick="comment_box('<?php echo $comment_id ?>', 'cu'); return false;" id="btn_mod_<?php echo $comment_id; ?>">수정</a>
</li>
<?php } ?>
<?php if ($list[$i]['is_del'])  { ?>
<li>
<a href="<?php echo $list[$i]['del_link']; ?>" onclick="return comment_delete();">삭제</a>
</li>
<?php } ?>
</ul>


요 코드 입니다.
근데 value 로 줘도 cannot property value of null 로 오류가 나네요 ㅠㅠㅠ



if문의 조건을
btnMod 로 하니 정상작동합니다....;
여기서 btnMod 는
var btnMod = document.getElementById(btn_mod);
 입니다;

올려주신 HTML에서

$list를 제외하고 위에 먼저 올려주신 스크립트를 적용해서
페이지를 구성해봤습니다.

http://deb.kr/test/testc2.php

오류가 다른쪽에서 나오는데요

소스보기/개발자도구로 확인해보세요

var c_holder;
var w_holder;

요게 function 위에 존재해야 합니다;
까먹고 안드렸네요;



다른걸 여쭤봐도 될까요?

댓글이 5개이고
각 댓글마다 1개의 대댓글이 달렸을 경우

사용자가 답변 버튼을 누르면 답변이 취소로 치환되어 나올것이고
이때, 사용자가 수정 버튼을 누르면 취소는 답변으로 수정은 취소로 나올것인데

이 상황에서
다른 댓글의 답변 버튼을 누르면..
이전 댓글의 수정버튼이 취소로 변경된 것은 다시 취소에서 수정으로 변경되야 하는데..
요게 좀 어렵네요;

아예 comment_id 가 있다면
초기화시켜버리는 소스는

btnRpy.innerHTML = '답변';
이라고 적어두면 되는것 아닌가요?

시간내주셔서 너무 감사드립니다.

각 코멘트별로 id에 해당되는 순번이 존재할테니
그 값을 가지고 getElementById로 접근하는게 가장 깔끔합니다.

jquery로 다양하게 접근할수있지만,
단순한게 유지보수에 상책이라고 봅니다.

다시말해
코멘트를 Loop로 뿌리는 시점에
각 코멘트별로  버튼별로 id를 다르게 만들어지게 해서
접근하시는게 낫다는겁니다.

패턴을 잘 정해서 만들어보시면될듯합니다.

그리고, 여러개의 코멘트가 수정/삭제가 동시에 열리는 경우는 매우 드물고
본인이 작성한건 여러개를 열어도 무방할듯 싶습니다.


// 에러나는 구문
             if(document.getElementById(btn_mod).innerHTML = "취소"){
// 에러나는 구문 끝

 

여기에서


if 문 안의 내용은
             document.getElementById(btn_mod).innerHTML = "취소"

 

대입문입니다.

비교문이 되도록 하시려면


// 에러나는 구문
             if(document.getElementById(btn_mod).innerHTML == "취소"){
// 에러나는 구문 끝

와 같이  == 를 하셔야죠

답변보기전에 저도 잘못쓴걸 봐서;
수정하고 실행해봤는데도 마찬가지네요 -_-;;;

Uncaught TypeError: Cannot read property 'innerHTML' of null
요런 에러가 나는데 이유가 뭘까요;

답변을 작성하시기 전에 로그인 해주세요.
전체 240
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT