묻고답하기
연속 글 등록 제한 방법?
2014.07.28 13:39
게시판에서 글 작성하고 '등록' 버튼 누를때 버튼을 여러번 누르는 회원들이 있습니다.
그래서 동일한 글이 2~3개가 등록되는 경우가 많습니다.
특히, 네트워크 환경이 좋지 않은 모바일에서 작성시 그런 경우가 많이 발생하는것 같네요.
이 경우 어떤 방식으로 해결하는것이 좋을까요?
(등록버튼 누르면 그 버튼이 사라져서 중복등록 안되게 하는 방법을 살짝 본것같은데 검색하니 나오지 않네요;;)
댓글 20
-
로이조52
2014.07.28 13:49
-
emskek2834
2014.07.28 13:53
중복 등록 해결 방법과는 조금 상이한 답변이지만.. 그래도 감사합니다~!!
-
몽실아빠
2014.07.28 13:50
저도 예전에는 네트워크가 불안하거나 혹은 모바일에서... 뭐 이런 짐작만 했는데 연동하는 모듈이나 애드온의 영향을 받는경우가 상당히 많습니다. 특히 외부서버와 연동이 되는 것을 사용할때 문제가 된다면 해당하는 문제를 찾아서 해결을 해 줘야 근본적으로 글 등록 버튼 이후 서버와의 통신이 길어져 등록버튼을 여러번 누르게 되는 일이 없어지게 되는 것 같네요.
-
emskek2834
2014.07.28 13:52
워낙 사용중인 애드온이랑 모듈이 많아서ㅠㅠ
답변 감사합니다 ^^
-
몽실아빠
2014.07.28 13:55
저도 그렇게 생각하고 말았던게 그리 오랜 일이 아닌데요. 서버를 최적화해서 새로 설치하고 상당히 빠른 응답으로 만들었음에도 불구하고 서버에요청중과 함께 지연이 생기는 현상이 발생해 많은 테스트를 해보고 한 결과 그냥 두는 것은 사용자에게 상당한 답답함과 불편함을 주게 된다고 생각을 바꿨습니다. 왜냐면 그런 현상을 제거했을때는 누름과 동시에 등록이 완료되는데 그렇지 못한 경우 3-5초 정도까지 지연이 된다면 상당히 답답함으로 다가온다는 것을요......
글 등록 시점해서 동작하는 애드온과 모듈은 몇가지 되지 않습니다. 그리고 만약 해당하는 서비스를 찾으셨다면 그 서비스의 모듈과 애드온의 문제 혹은 그 외부서버의 문제가 아닌 사이트 자체의 서버의 문제가 있는 상태일 수 있습니다.
-
emskek2834
2014.07.28 15:05
오늘 모듈이랑 애드온 검토도 해보고 서버에 문제가 있는지도 한번 봐야겠네요
조언 감사합니다!
-
emskek2834
2014.07.28 13:51
자문자답
http://www.xpressengine.com/tip/22105345
-
애니즌
2014.07.28 14:07
단순히 위와 같이 처리하시면
경고창이 떴을 경우 글을 등록할 수 없습니다.(예를 들어 "내용을 입력해주세요." 경고창등...)
-
애니즌
2014.07.28 14:23
onClick="this.disabled=true"
대신에
<button onclick="beCheckWrite(this)">dddd</button>
<input type="submit" value="등록중" onclick="beCheckWrite(this)"/>* input / button 관계없이 작동하도록 만들었습니다.
이렇게 하시고 밑에 별도의 function을 만들어서 처리해주세요.
<script> function beCheckWrite(obj){ var delaytime = 5000, // 몇초 후 재활성화 해줄 건지 설정 1000 = 1초 submingText = '등록중입니다.', // 클릭했을 때 보여줄 멘트.. ori_text = jQuery(obj).val(), checkInput = false; //우선 비활성화를 한다. obj.disabled=true; //기존 멘트를 바꿔준다. if(!ori_text){ checkInput = false; ori_text = jQuery(obj).text(); jQuery(obj).text(submingText); }else{ checkInput = true; jQuery(obj).val(submingText); } // 설정한 시간이 지나면 다시 활성화 var timeEvent = setTimeout(function(){ obj.disabled=false; if(checkInput) jQuery(obj).val(ori_text); else jQuery(obj).text(ori_text); },delaytime); } </script>
방식은 간단합니다.우선 글등록 버튼을 누르면 기능을 막고 설정한 시간 후에 다시 활성화 해주는 겁니다.
현재 공홈도 이와 같은 방식으로 되어 있습니다.
-
emskek2834
2014.07.28 15:03
아.. 정말 감사합니다. 역시 애니즌님..ㅠㅠ
-
애니즌
2014.07.28 15:10
코드에 잘못된 부분이 있어 수정했습니다.
확인 후 다시 반영바랍니다.
도움이 되었다니 다행이네요 ㅎ
-
emskek2834
2014.07.28 16:32
저기 정말 죄송하지만ㅠ 수정해주실 수 있으신가요?
<div class="buttonRight">
<span class="buttonOfficial write"><input type="submit" value="{$lang->cmd_registration}" accesskey="s" style="padding-left:20px;padding-right:20px;font-weight:bold;" /></span>
</div>
제가 하니깐 잘 안되네요..;;
-
애니즌
2014.07.28 16:34
<div class="buttonRight">
<span class="buttonOfficial write"><input type="submit" value="{$lang->cmd_registration}" accesskey="s" style="padding-left:20px;padding-right:20px;font-weight:bold;" onclick="beCheckWrite(this)"/></span>
</div>스크립트 소스는 게시판 스킨 .js 파일에 넣든.. 해당 파일에 하단에 넣든.. 하셔야 합니다.
-
emskek2834
2014.07.28 16:42
흠..ㅠ '등록' 버튼을 누르면 '등록중입니다' 버튼으로 변경되고나서 아무 반응이 없다가
그냥 다시 '등록' 버튼으로 돌아옵니다.. 글 등록이 되질 않네요ㅠ
스크립트 파일도 write.html 파일 하단에 삽입했는데 이상하네요;;
-
애니즌
2014.07.28 16:44
한번 체크해볼게요
-
애니즌
2014.07.28 16:47
음.. 어떤 스킨을 사용하고 계신지 모르겠지만... 기본적으로 처리가 되어 있는 듯 한데요..?
xe_2007,2008,2009 스킨과 스케치북에서 확인했습니다.
아..! 모바일이군요.. 다시 확인하러..ㅡ.ㅡ;;
-
emskek2834
2014.07.28 17:07
아.. 제가 유료 스킨을 사용중이라서 그런가봐요ㅠㅠ
제가 스케치북 스킨이나 기본스킨으로 바꿔서 사용하겠습니다.
너무 감사합니다ㅠㅠ
-
애니즌
2014.07.28 17:08
<script> function beCheckWrite(obj){ var delaytime = 5000, // 몇초 후 재활성화 해줄 건지 설정 1000 = 1초 submingText = '등록중입니다.', // 클릭했을 때 보여줄 멘트.. ori_text = jQuery(obj).val(), checkInput = false; //button 인지 submit인지 체크.. if(!ori_text){ checkInput = false; ori_text = jQuery(obj).text(); }else{ checkInput = true; } //현재 버튼 이름이 submingText와 동일한 경우 전송중으로 판단 전송하지 않음. if(ori_text == submingText) return false; //우선 비활성화를 한다. //obj.disabled=true; //기존 멘트를 바꿔준다. if(!checkInput){ jQuery(obj).text(submingText); }else{ jQuery(obj).val(submingText); } // 설정한 시간이 지나면 다시 활성화 setTimeout(function(){ if(checkInput) jQuery(obj).val(ori_text); else jQuery(obj).text(ori_text); },delaytime); return true; } </script>
스크립트를 이걸로 바꿔보세요.
그리고 전송버튼에는 이렇게.. onclick="return beCheckWrite(this)" 해주시구요..
확인해보니까 모바일에서 submit 버튼이 disabled=true;가 되버리면 아예 전송이 안되는 것 같습니다.
그래서 코드를 수정하였습니다.
자체적으로 테스트하였을 땐 여러번 눌러도 한 번만 등록되는 것으로 확인되었는데....
다른 환경에서는 모르겠네요
갤럭시 노트2 키캣 기본 웹브라우저에서 테스트했습니다.
-
emskek2834
2014.07.28 17:38
모바일에서 테스트 해본 결과 잘 작동합니다!!!
이제 아무리 등록버튼을 연타로 눌러도 게시물은 하나만 등록되네요.
갤S2 에서 테스트하였습니다~
감사합니다 ^_^
-
애니즌
2014.07.28 17:48
잘되신다니 다행입니다.^^
연달아 글등록 방지 애드온 ver. 0.1