테스트 사이트 - 개발 중인 베타 버전입니다

댓글창 하나 질문드려요 ㅠㅠㅠ 채택완료

lacomparte 7년 전 조회 1,537

</p>

<p>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 = "취소";</p>

<p>                    if(document.getElementById(btn_rpy).innerHTML = "취소"){

                        document.getElementById(btn_rpy).innerHTML = "답변";

                    }</p>

<p>                } else {

                    console.log('답변열림');

                    document.getElementById(btn_rpy).innerHTML = "취소";</p>

<p> </p>

<p>// 에러나는 구문</p>

<p>                    <span style="color:#e74c3c"><strong> if(document.getElementById(btn_mod).innerHTML = "취소"){</strong></span></p>

<p>// 에러나는 구문 끝

                        alert('dd');

                        document.getElementById(btn_mod).innerHTML = "수정";

                    }

                }</p>

<p>                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;

                }

            }</p>

<p>            var el_id;</p>

<p>

            // 댓글 아이디가 넘어오면 답변, 수정

            if (comment_id)

            {

                if (work == 'c')

                    el_id = 'reply_' + comment_id;

                else

                    el_id = 'edit_' + comment_id;

            }

            else

                el_id = 'bo_vc_w';</p>

<p>            if (save_before != el_id)

            {

                if (save_before)

                {</p>

<p>                    // 하단 원글 댓글폼 유지 코드

                    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 삭제 코드

                    }</p>

<p>                }

                

                document.getElementById(el_id).style.display = '';                    // 원글 댓글 입력폼 display 속성

                document.getElementById(el_id).innerHTML = save_html;                // 댓글 입력폼</p>

<p>                // 댓글 수정

                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;

                    */

                }</p>

<p>                document.getElementById('comment_id').value = comment_id;

                document.getElementById('w').value = work;</p>

<p>                if(save_before)

                    $("#captcha_reload").trigger("click");</p>

<p>                save_before = el_id;

            }

            c_holder = comment_id;

            w_holder = work;

        }</p>

<p>

 

 

//에러나는 구문

//에러나는 구문 끝

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

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

댓글을 작성하려면 로그인이 필요합니다.

답변 2개

채택된 답변
+20 포인트
플래토
7년 전

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

 

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

의 문장을

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

 

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

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

 

와 같이 변경해보세요

로그인 후 평가할 수 있습니다

답변에 대한 댓글 6개

l
lacomparte
7년 전
흡;
마찬가지 입니다.

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

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

근데 오류 문구는 같네요 ㅠ
플래토
7년 전
btn_mod 영역이 있는
HTML코드를 올려줘보세요

굳이 innerHTML 을 사용해야 하는건지 먼저 확인이 필요해보이네요
보통 value로 하면 될거 같습니다만
l
lacomparte
7년 전
<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);
입니다;
플래토
7년 전
올려주신 HTML에서

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

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

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

소스보기/개발자도구로 확인해보세요
l
lacomparte
7년 전
var c_holder;
var w_holder;

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



다른걸 여쭤봐도 될까요?

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

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

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

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

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

시간내주셔서 너무 감사드립니다.
플래토
7년 전
각 코멘트별로 id에 해당되는 순번이 존재할테니
그 값을 가지고 getElementById로 접근하는게 가장 깔끔합니다.

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

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

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

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

댓글을 작성하려면 로그인이 필요합니다.

플래토
7년 전

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

 

여기에서

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

 

대입문입니다.

비교문이 되도록 하시려면

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

와 같이  == 를 하셔야죠

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

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

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

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인