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

댓글 삭제 후 스크롤이 맨 위로 올라가는 문제 채택완료

하호헤하 1년 전 조회 6,503

다음 사진에서 보시다시피 댓글 삭제 후 스크롤이 맨 위로 올라갑니다.

 

댓글 삭제 후에 스크롤 위치를 그대로 유지시키려면 어떻게 수정을 해야할까요?

 

http://sir.kr/data/editor/2407/2009096195_1720745597.5169.gif" />

 

 

그누보드 데모 사이트: https://demo.sir.kr/gnuboard5/?device=mobile

 

</p>

<p><script></p>

<p>    var save_before = '';</p>

<p>    var save_html = document.getElementById('bo_vc_w').innerHTML;</p>

<p> </p>

<p>    function good_and_write()</p>

<p>    {</p>

<p>        var f = document.fviewcomment;</p>

<p>        if (fviewcomment_submit(f)) {</p>

<p>            f.is_good.value = 1;</p>

<p>            f.submit();</p>

<p>        } else {</p>

<p>            f.is_good.value = 0;</p>

<p>        }</p>

<p>    }</p>

<p> </p>

<p>    function fviewcomment_submit(f)</p>

<p>    {</p>

<p>        var pattern = /(^\s*)|(\s*$)/g; // \s 공백 문자</p>

<p> </p>

<p>        f.is_good.value = 0;</p>

<p> </p>

<p>        /*</p>

<p>        var s;</p>

<p>        if (s = word_filter_check(document.getElementById('wr_content').value))</p>

<p>        {</p>

<p>            alert("내용에 금지단어('"+s+"')가 포함되어있습니다");</p>

<p>            document.getElementById('wr_content').focus();</p>

<p>            return false;</p>

<p>        }</p>

<p>        */</p>

<p> </p>

<p>        var subject = "";</p>

<p>        var content = "";</p>

<p>        $.ajax({</p>

<p>            url: g5_bbs_url+"/ajax.filter.php",</p>

<p>            type: "POST",</p>

<p>            data: {</p>

<p>                "subject": "",</p>

<p>                "content": f.wr_content.value</p>

<p>            },</p>

<p>            dataType: "json",</p>

<p>            async: false,</p>

<p>            cache: false,</p>

<p>            success: function(data, textStatus) {</p>

<p>                subject = data.subject;</p>

<p>                content = data.content;</p>

<p>            }</p>

<p>        });</p>

<p> </p>

<p>        if (content) {</p>

<p>            alert("내용에 금지단어('"+content+"')가 포함되어있습니다");</p>

<p>            f.wr_content.focus();</p>

<p>            return false;</p>

<p>        }</p>

<p> </p>

<p>        // 양쪽 공백 없애기</p>

<p>        var pattern = /(^\s*)|(\s*$)/g; // \s 공백 문자</p>

<p>        document.getElementById('wr_content').value = document.getElementById('wr_content').value.replace(pattern, "");</p>

<p>        if (char_min > 0 || char_max > 0)</p>

<p>        {</p>

<p>            check_byte('wr_content', 'char_count');</p>

<p>            var cnt = parseInt(document.getElementById('char_count').innerHTML);</p>

<p>            if (char_min > 0 && char_min > cnt)</p>

<p>            {</p>

<p>                alert("댓글은 "+char_min+"글자 이상 쓰셔야 합니다.");</p>

<p>                return false;</p>

<p>            } else if (char_max > 0 && char_max < cnt)</p>

<p>            {</p>

<p>                alert("댓글은 "+char_max+"글자 이하로 쓰셔야 합니다.");</p>

<p>                return false;</p>

<p>            }</p>

<p>        }</p>

<p>        else if (!document.getElementById('wr_content').value)</p>

<p>        {</p>

<p>            alert("댓글을 입력하여 주십시오.");</p>

<p>            return false;</p>

<p>        }</p>

<p> </p>

<p>        if (typeof(f.wr_name) != 'undefined')</p>

<p>        {</p>

<p>            f.wr_name.value = f.wr_name.value.replace(pattern, "");</p>

<p>            if (f.wr_name.value == '')</p>

<p>            {</p>

<p>                alert('이름이 입력되지 않았습니다.');</p>

<p>                f.wr_name.focus();</p>

<p>                return false;</p>

<p>            }</p>

<p>        }</p>

<p> </p>

<p>        if (typeof(f.wr_password) != 'undefined')</p>

<p>        {</p>

<p>            f.wr_password.value = f.wr_password.value.replace(pattern, "");</p>

<p>            if (f.wr_password.value == '')</p>

<p>            {</p>

<p>                alert('비밀번호가 입력되지 않았습니다.');</p>

<p>                f.wr_password.focus();</p>

<p>                return false;</p>

<p>            }</p>

<p>        }</p>

<p> </p>

<p>        <?php if($is_guest) echo chk_captcha_js(); ?></p>

<p> </p>

<p>        set_comment_token(f);</p>

<p> </p>

<p>        document.getElementById("btn_submit").disabled = "disabled";</p>

<p> </p>

<p>        return true;</p>

<p>    }</p>

<p> </p>

<p>    function comment_box(comment_id, work)</p>

<p>    {</p>

<p>        var el_id,</p>

<p>        form_el = 'fviewcomment',</p>

<p>        respond = document.getElementById(form_el);</p>

<p> </p>

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

<p>        if (comment_id)</p>

<p>        {</p>

<p>            if (work == 'c')</p>

<p>                el_id = 'reply_' + comment_id;</p>

<p>            else</p>

<p>                el_id = 'edit_' + comment_id;</p>

<p>        }</p>

<p>        else</p>

<p>            el_id = 'bo_vc_w';</p>

<p> </p>

<p>        if (save_before != el_id)</p>

<p>        {</p>

<p>            if (save_before)</p>

<p>            {</p>

<p>                document.getElementById(save_before).style.display = 'none';</p>

<p>            }</p>

<p> </p>

<p>            document.getElementById(el_id).style.display = '';</p>

<p>            document.getElementById(el_id).appendChild(respond);</p>

<p>            //입력값 초기화</p>

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

<p> </p>

<p>            // 댓글 수정</p>

<p>            if (work == 'cu')</p>

<p>            {</p>

<p>                document.getElementById('wr_content').value = document.getElementById('save_comment_' + comment_id).value;</p>

<p>                if (typeof char_count != 'undefined')</p>

<p>                    check_byte('wr_content', 'char_count');</p>

<p>                if (document.getElementById('secret_comment_'+comment_id).value)</p>

<p>                    document.getElementById('wr_secret').checked = true;</p>

<p>                else</p>

<p>                    document.getElementById('wr_secret').checked = false;</p>

<p>            }</p>

<p> </p>

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

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

<p> </p>

<p>            if(save_before)</p>

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

<p> </p>

<p>            save_before = el_id;</p>

<p>        }</p>

<p>    }</p>

<p> </p>

<p>    function comment_delete()</p>

<p>    {</p>

<p>        return confirm("이 댓글을 삭제하시겠습니까?");</p>

<p>    }</p>

<p> </p>

<p>    comment_box('', 'c'); // 댓글 입력폼이 보이도록 처리하기위해서 추가 (root님)</p>

<p> </p>

<p>    <?php if($board['bo_use_sns'] && ($config['cf_facebook_appid'] || $config['cf_twitter_key'])) { ?></p>

<p>    $(function() {</p>

<p>    // sns 등록</p>

<p>        $("#bo_vc_send_sns").load(</p>

<p>            "<?php echo G5_SNS_URL; ?>/view_comment_write.sns.skin.php?bo_table=<?php echo $bo_table; ?>",</p>

<p>            function() {</p>

<p>                save_html = document.getElementById('bo_vc_w').innerHTML;</p>

<p>            }</p>

<p>        );</p>

<p>

 </p>

<p>           </p>

<p>    });</p>

<p>    <?php } ?></p>

<p> </p>

<p>    $(function() {            </p>

<p>        //댓글열기</p>

<p>        $(".cmt_btn").click(function(){</p>

<p>            $(this).toggleClass("cmt_btn_op");</p>

<p>            $("#bo_vc").toggle();</p>

<p>        });</p>

<p>    });</p>

<p>    </script>

 

위 스크립트 중에 하나를 수정하면 될 거 같은데 어느 부분을 어떻게 수정해야될지를 모르겠네요 ㅠㅠ

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

답변 5개

채택된 답변
+20 포인트

위로 올라가는게 아니라 댓글 삭제 후 페이지가 새로고침 되는거라 불가합니다.

기타 다른 방법으로는 비동기식(ajax) 로 처리하는방법과 댓글 삭제 후 해당 스크롤 위치를 기억해서 다시 내리는 방법이 있는데 그렇게 추천드리진 않습니다.

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

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

1년 전

간단히 두 가지를 추가하세요

1. bbs/delete_comment.php 맨 마지막 코드 수정

goto_url(short_url_clean(G5_HTTP_BBS_URL.'/board.php?wk=D&bo_table~~~ //wk

 

2. view_comment 스킨 맨 마지막 자바스크립트에 추기

$("html, body").animate({scrollTop: $(".cmt_btn").offset().top }, 10);

 

10<==500, 1000 바꿔가며 해보세요. 스르륵~~~ 됩니다

 

삭제 후 바로위의 댓글로 이동하는 것도 가능하지만 복잡해지겠으므로 그냥 댓글 처음으로 이동 

 

 

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

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

그누보드 자체 구조 및 PHP 만으로는 작업할 수 없습니다.

 

ajax 등을 사용하여 비동기 형태로 작업해야 합니다. 작업하기 어려우시다면 제작의뢰 또는 https://open.kakao.com/o/saLedtzg 오픈채팅으로 문의 주시면 안내해드리겠습니다^^

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

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

R
1년 전

비동기식으로 작업하셔야 해요.

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

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

1년 전

일단은 그냥은 불가능합니다.

 

페이지 전환이 이루어진 다음 화면에 보여지기 때문에

 

마치 맨 위로 올라가는 것 처럼 보일 뿐 실제로는 페이지가 완전히 새로고침 되는 형태입니다.

 

https://demo.sir.kr/gnuboard5/bbs/board.php?bo_table=free&wr_id=4687&&#c_4698

 

여기에서 삭제 이후 주소가 완전히 바뀝니다. 

 

 

해당 주소를 ajax로 전송하셔서 댓글 화면만 재 갱신 하셔야 합니다.

 

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

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

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

로그인