728x90
회사에서 개발한 내용 정리하기!!
이슈사항
인증번호 전송에 대한 반복 호출 확인
- 1분 내 최대 5번만 호출되도록 수정
해결방법
js에서 제어하려고 함.
초기 인증번호 클릭 count = 0 으로 두고
setTimeout을 60초로 걸어서 60초 후에는 count 를 0으로 초기화
count가 5번이 넘어가면, alert창 띄우ㅕ return 시킴
"인증번호 전송은 1분간 최대 5번만 가능합니다.";
하지만..!
이렇게 되면 f12 개발자도구에서 count = 0;으로 넣어버리면
인증번호를 계속 받을 수 있게끔 조정할 수 있다..
결론....
인증번호 호출하는 서버단에서 count를 세어하는게 맞는 것 같다..
Js에서 제어하지 않고 Java단에서 제어하도록 수정!!
아래 코드는 js로 제어한것! (공통 유틸함수 만든것을 쪼금 포함해보았다..ㅎ)
<span id=“divMbphNo”>
<input type=“text” placeholder=“숫자만 입력” id-“mbrMbphNo” name=“mbrMbphNo” maxlength=“11”>
<button type=“button” class=“disabled” id=“btnAuthNoReg”>인증번호 전송</button>
<%— 활성화 시 disabled 클래스 삭제 —%>
<p class=“hidden”>올바른 전화번호를 입력해주세요.</p>
</span>
$(“#mbrMbphNo”).on({
keyup : function(e){
<%—- 숫자만 입력 가능 %-—>
var keyCd = e.keyCode;
if(keyCd > 48 && keyCd < 57){
return true;
} else {
var inputVal = $(this).val();
$(this).val(inputVal.replace(/[^0-9]/gi,’’));
return false;
}
<%—- 폰 번호 체크 %-—>
if($(this).val().length < 10){
if(!$(“btnAuthNoReg”).hasClss(“disabled”){) $(“btnAuthNoReg”).addClass(“disabled”);
}
addWarnMsg(“#divMbphNo”);
return false;
} else {
var mbrMbphNo = $(this).val();
var check = fnCheckMbrMbphNo(mbrMbphNo);
if(check){
$(“btnAuthNoReg”).removeClass(“disabled”);
removeWarnMsg(“#divMbphNo”);
}
}
}
change : function(){
if($(this).val().length < 10){
if(!$(“#btnAuthNoReg”).hasClass(“disabled”)){
$(“#btnAuthNoReg”).addClass(“disabled”);
}
return false;
} else {
$(this).focus();
if($(“#btnAuthNoReg”).hasClass(“disabled”)){
$(“#btnAuthNoReg”).removeClass(“disabled”);
}
}
if(utlf_isNullOrEmpty($(this).val())){
if(!$(“#btnAuthNoReg”).hasClass(“disabled”)){
$(“#btnAuthNoReg”).addClass(“disabled”);
}
cmmf_alert(“휴대폰 번호를 입력해주세요”);
$(this).focus();
return false;
}
}
});
<%—- 경고문구 function —-%>
function addWarnMsg(id){
var pT = $(id);
if(pT.find(“p.msg-error”).hasClass(“hidden”){
pt.find(“p.msg-error”).removeClass(“hidden” ) else {
return;
}
};
function removeWarnMsg(id){
var pT = $(id);
if(!pT.find(“p.msg-error”).hasClass(“hidden”){
pt.find(“p.msg-error”).addClass(“hidden” ) else {
return;
}
};
<%—- 폰 번호 검증 —-%>
function fnCheckMbrMbphNo(mbrMbphNo){
var regExp = /^01(?:0|1|[6-9])(?:\d{3}|\d{4})\d{4}$/;
var check = regExp.test(mbrMbphNo);
return check;
};
<%—- 공통 유틸 함수 —-%>
function utlf_isNullOrEmpty(obj){
if(utlf_isNull(obj)){
return true;
} else {
if(typeof obj == “string”){
if(obj.length < 1){
return true;
}
}
}
return false;
};
function utlf_isNull(obj){
if(typeof obj == “undefined” || obj == null){
return true;
}
return false;
};
Function cmmf_alert(message, callbackFn, svcId, data){
var options = {};
options.svcId = svcId;
options.callbackFn = callbackFn;
options.successValue = 0;
if(typeof message == “string”){
options.content = message;
} else {
if(utlf_isNull(message, table)){
options.content = message.content;
options.subContent = message.subContent;
}else {
options.title = message.title;
options.table = message.table;
}
}
options.data = data;
options.btn = [{title:”확인”, value=0}];
cmmf_buttonPop(options);
};
//버튼을 가진 layer팝업. 직접적인 호출 지양.
//cmmf_alert, cmmf_confirm 사용 권장.
function cmmf_buttonPop(options){
if($(“#cmmd_default”).isActive()){
//이미 열려있는 팝업이 있는 경우 기존 팝업 유지
return;
}
var opts = $.extend({
svcId = “DEFAULT_POP”,
content = ”확인”,
SuccessValue = 0,
btn:[{title:”확인”, value=0}]
},options);
if(utlf_isNull(opts.title)){
cmmf_showPop(opts);
} else {
if(utlf_isNull(opts.table)){
cmmf_showTitlePop(opts);
} else {
cmmf_showTablePop(opts);
}
}
};
/**
* 메시지 Confirm 팝럽 그리기
*/
Function cmmf_showPop(options){
if($(“#cmmd_default”).size > 0){
$(“#cmmd_default”).remove();
}
var btnCnt = options.btn.length;
if(btnCnt > 2) btnCnt = 2;
var btnClass;
var popContent = [];
popContent.push(‘<div id=“cmmd_default” class=“modal”>’);
popContent.push(‘<div class=“modal-content”>’);
popContent.push(‘<p class=“small”> + options.contents + </p>’); if(!utlf_isNull(options.subContent)){
popContent.push(‘<p class=“small-xs”>’ + options.subContent + ‘</p>’);
}
popContent.push(‘<div class=“btn-group-inline”>’);
for(var ii=0; ii < btnCnt; ii++){
btnClass = (options.btn[ii].value == options.successValue) ? “btn btn-success”:”btn btn-cancel”;
popContent.push(‘<button type=“button” class=“‘ + btnClass + ‘”>’ + options.btn[ii].title + ’</button>’)
}
popContent.push(‘</div>’);
popContent.push(‘</div>’);
popContent.push(‘</div>’);
$(“body”).append(popContent.join(“”));
$(“#cmmd_default div.btn-group-inline :button”),each(function(index){
$(this).on(“click”, function(){cmmf_callbackPop.call(options, options.btn[index].value);});
});
$(“#cmmd_default”).addActive();
pubUi.scrollDisabled.preventScroll();
};
'JAVASCRIPT' 카테고리의 다른 글
[JS] vanilla JS로 Ajax 통신하기 (0) | 2022.11.20 |
---|---|
[JS - jQuery] $.each(), $(“selector”).each(), $(this) - 개발자 배찌 (0) | 2022.10.14 |
[JS] 실무 - chart.js 활용해서 그래프 만들어보기 - 개발자 배찌 (0) | 2022.10.07 |
[js] api를 이용하여 정보 얻어내기 (jquery, json 활용) (0) | 2022.02.05 |
[JS] JSON 데이터를 웹페이지로 출력하기 (0) | 2022.01.07 |