// -- 페이지 initialize 관련 함수 시작 -- // /* * html 페이지 로딩후 최초 실행하는 스크립트. */ initializeHtmlPage(); /** * 최초 로딩시 페이지 초기 설정 */ function initializeHtmlPage() { var forms = document.getElementsByTagName("form"); for (var i = 0; i < forms.length; i++) { document.forms[i].initialize = initializeHtmlForm; document.forms[i].initialize(); } } /** * 호출된 폼마다 셋팅하기. *
initialize시 셋팅하는 정보 : 필수 요소(css), mask, letter type */ function initializeHtmlForm() { this.spiderSubmit = formSubmitValidation; this.submitStat = "false"; var elems = this.elements; for (var i = 0; i < elems.length; i++) { var tagName = elems[i].tagName.toLowerCase(); if (tagName == "input") { // 필수 요소일때는 인풋창 왼쪽 위에 이미지 설정. var nullable = elems[i].attributes['nullable'] ? elems[i].attributes['nullable'].value : ""; if (nullable == "false") elems[i].className = "frameworkInitNullable"; // mask가 있을경우 #은 값을 의미함. var maskForm = elems[i].attributes['maskform'] ? elems[i].attributes['maskform'].value : ""; if (maskForm != "" && maskForm != "usermask") initSetMaskUp(elems[i]); //mask 타입(ex : ####/##/## , ####-##-## , ######-####### , ###-##-##### , ...) // 문자 타입이 있을경우 var charType = elems[i].attributes['chartype'] ? elems[i].attributes['chartype'].value : ""; if (charType != "") initSetLetterType(elems[i]); //문자 셋(english,korean,english+number, number, floatmoney,int)타입 // 속성이 있을경우 var disableCss = elems[i].attributes['disablecss'] ? elems[i].attributes['disablecss'].value : ""; if (disableCss != "") initSetAttribute(elems[i]); } } } /** * sider FrameWork의 form submit 함수 */ function formSubmitValidation() { //이중 서브밑 방지 if (this.submitStat != "false") { alert("이미 submit 되었습니다."); return false; } else { this.submitStat = "validating"; //기본 밸리데이션 체크 함수 호출 if (checkValidationInForm(this)) { this.submitStat = "true"; this.submit(); return true; } else { this.submitStat = "false"; return false; } } } /** * 속성에 따른 input창 상태 셋팅. *
ex : initSetAttribute(form1.name) * @param element : 이벤트를 셋팅할 element */ function initSetAttribute(element) { var disableCss = element.attributes['disablecss'] ? element.attributes['disablecss'].value : ""; if (disableCss == "true") { element.disabled = true; element.className = "frameworkDisabled"; } } /** * validation check 함수 * @param form : validation 검사를 할 폼. * @return boolean */ function checkValidationInForm(form) { var elements = form.elements; for (var i = 0; i < elements.length; i++) { // mask한 값에서 마스크 값 삭제 var maskForm = elements[i].attributes['maskform'] ? elements[i].attributes['maskform'].value : ""; var charType = elements[i].attributes['chartype'] ? elements[i].attributes['chartype'].value : ""; if (maskForm != "" || charType == "money") { if (maskForm == "usermask") elements[i].value = unMaskEngNum(elements[i].value);//사용자 마스크 지우기 로직. else elements[i].value = getOnlyNumberFormat(elements[i].value); } // Input Box 태그일 경우 var tagName = elements[i].tagName.toLowerCase(); var nullable = elements[i].attributes['nullable'] ? elements[i].attributes['nullable'].value : ""; var message = elements[i].attributes['message']; var title = elements[i].title || elements[i].name; if (tagName == "input") { // 필수 값 체크 if (nullable == "false") { // type이 text 또는 password일 경우 var type = elements[i].type.toLowerCase(); if (type == "text" || type == "password") { // Value 값이 없을 경우 if (elements[i].value == "") { alert(message || (title + "은(는) 필수 입력 사항입니다."));//alert 메세지 함수 호출 if (elements[i].className == "") elements[i].className = "frameworkNullable"; else elements[i].className = elements[i].className + " " + "frameworkNullable"; elements[i].select(); return false; } else { // 한번 validation에서 css설정이 되었을 경우 빼야 하기 때문에. var classArray = elements[i].getAttribute("className").split(" "); elements[i].className = removeClassName(classArray, "frameworkNullable"); } } else if (type == "checkbox" || type == "radio") { var checkState = false; var elementArray = eval("forms." + elements[i].name); for (var ct = 0; ct < elementArray.length; ct++) { if (elementArray[ct].checked) { checkState = true; break; } } if (!checkState) { alert(message || (title + "은(는) 필수 선택 사항입니다.")); elements[i].focus(); return false; } } } if (elements[i].value != "") { // 최대값 체크 var maximum = elements[i].attributes['maximum'] ? elements[i].attributes['maximum'].value : ""; if (maximum != "") { if (!validateMaximum(maximum, elements[i].value)) { alert(message || (title + "은(는) 정해진 최대값보다 큽니다.")); elements[i].select(); return false; } } //최소값 체크 var minimum = elements[i].attributes['minimum'] ? elements[i].attributes['minimum'].value : ""; if (minimum != "") { if (!validateMinimum(minimum, elements[i].value)) { alert(message || (title + "은(는) 정해진 최소값보다 작습니다.")); elements[i].select(); return false; } } //최대 바이트 체크 var maxByte = elements[i].attributes['maxbyte'] ? elements[i].attributes['maxbyte'].value : ""; if (maxByte != "") { if (!validateMaxBytes(maxByte, elements[i].value)) { var kor_cnt = Math.floor(maxByte / 2); alert(message || (title + "은(는) 한글 " + kor_cnt + "자, 영문 " + maxByte + "자를 초과할 수 없습니다.")); elements[i].select(); return false; } } } //select 타입이 필수일때 } else if (tagName == "select") { if (elements[i].disabled) elements[i].disabled = false; if (nullable == "false" && elements[i].value == "") { alert(message || (title + "은(는) 필수 선택 사항입니다.")); elements[i].focus(); return false; } //textarea 타입이 필수일때 } else if(tagName == "textarea") { if (nullable == "false" && isWhitespace(elements[i].value)) { alert(message || (title + "은(는) 필수 입력 사항입니다.")); elements[i].value = ''; elements[i].focus(); return false; } } } return true; } /** * 숫자열 마스크 씌우기 *
ex : initSetMaskUp(form1.element) * @param element : 마스크를 셋팅할 element */ function initSetMaskUp(element) { element.onkeypress = setKeyInputNumberOnly; element.onfocus = filterGetNumberOnly; element.onblur = setInitMaskUp; } /** * 페이지 초기화시 숫자만 입력받기 */ function setKeyInputNumberOnly() { if (event.shiftKey == true) event.returnValue = false; if (event.keyCode >= 48 && event.keyCode <= 57) { //숫자 키코드값 return true; } else { // enter, tab, backspace 방향키(앞,뒤)는 예외처리 if (event.keyCode == 8 || event.keyCode == 9 || event.keyCode == 37 || event.keyCode == 39) { return true; } event.returnValue = false; } return false; } /** * 페이지 초기화시에 onfocus 이벤트에 할당되면 이 Elemnent에 숫자외의 문자("," , "/" , "-")는 focus시에 제거됨 */ function filterGetNumberOnly() { this.value = getOnlyNumberFormat(this.value); this.select(); } /** * 페이지 초기화시에 마스크 설정값대로 변환하기 */ function setInitMaskUp() { var mask = this.attributes['maskform'] ? this.attributes['maskform'].value : ""; if (this.value != "") { var inputValue = getOnlyNumberFormat(this.value); for (var i = 0; i < mask.length; i++) { if (mask.substring(i, i + 1) != "#" ) inputValue = inputValue.substring(0, i) + mask.substring(i, i + 1) + inputValue.substring(i); } this.value = inputValue; } } /** * 페이지 초기화시에 언어 및 숫자형 입력 및 표현 처리. * @param element : 이벤트를 셋팅할 element */ function initSetLetterType(element) { element.style.imeMode = "disabled"; var charType = element.attributes['chartype'] ? element.attributes['chartype'].value : ""; if (charType == "eng") { // 영어만 element.onkeypress = setLetterEnglishOnly; } else if (charType == "engnum") { // 영어 + 숫자 } else if (charType == "float") { // 실수형 element.onkeypress = setLetterFloatOnly; } else if (charType == "int") { // 정수형 element.onkeypress = setLetterInteger; } else if (charType == "onlynum") { // 오직 숫자만 element.onkeypress = setKeyInputNumberOnly; } else if (charType == "money") { // 정수로만 된 아주 기본적인 금액 표시 element.style.textAlign = "right"; element.onkeydown = setKeydownMoney; // 키가 눌러졌을때 element.onkeyup = setKeypressMoney; // 키를 눌렀다 놓았을때 } else if (charType == "floatmoney") { // 실수로된 아주 기본적인 금액 표시 element.style.textAlign = "right"; element.onkeydown = setKeydownFloatMoney; // 키가 눌러졌을때 element.onkeyup = setFloatMoney; // 키를 눌렀다 놓았을때 } else { element.style.imeMode = "active"; } } /** * 사용자가 지정한 마스크업 스타일중 영어,숫자 혼합인 데이타의 mask를 지울때 사용 영어,숫자 이외의 문자 제거 *
ex : unMaskEngNum(String) * @param data : 마스크가 있는 String * @return 구분자를 제외한 String */ function unMaskEngNum(data) { var accReg = new RegExp('([a-zA-Z0-9])'); var temp = ""; for (var i = 0; i < data.length; i++) { if (accReg.test(data.substr(i,1))) temp += data.substr(i,1); } return temp; } /** * 문자열에서 숫자만 빼오기 체크 로직 * ex : getOnlyNumberFormat(form1.name.value) * @param stringValue : 변환할 String 값 */ function getOnlyNumberFormat(stringValue) { if (!stringValue) return ""; var temp = ""; var result = ""; for (var index = 0; index < stringValue.length; index++) { temp = parseInt(stringValue.charAt(index), 10); if (temp >= 0 || temp <= 9) result += temp; } return result; } /** * 중첩된 css에서 해당 css만 제거 *
removeClassName(["input1","input2"],"input1") * @param classNameArray : 설정되어 있는 class 배열. (참고로 class는 class="input1 input2" 이런식으로 중복될수 있다. * @param className : 제거할 class명 * @return 제거할 css가 제거된 스트링값 */ function removeClassName(classNameArray, className) { var resultClassNames = ""; for (var i = 0; i < classNameArray.length; i++) if (className != classNameArray[i]) resultClassNames += classNameArray[i] + " "; return resultClassNames; } /** * 키 입력시 영어만 입력받기 */ function setLetterEnglishOnly() { var pKey = String.fromCharCode(event.keyCode); var eReg = /[a-zA-Z]/g; if (pKey != "\r" && !eReg.test(pKey)) //엔터키 및 regkey가 아닐경우 리턴 event.returnValue = false; delete eReg; } /** * 키 입력시 숫자 , . , - 값만 입력받음. */ function setLetterFloatOnly() { var pKey = String.fromCharCode(event.keyCode); var floatReg = /[0-9\\.\\-]/g; if (pKey != "\r" && !floatReg.test(pKey)) //엔터 키 및 regkey가 아닐경우 리턴 event.returnValue = false; delete floatReg; } /** * 키 입력시 숫자,- 값만 입력받음. */ function setLetterInteger() { var pKey = String.fromCharCode(event.keyCode); var intReg = /[0-9\\-]/g; if (pKey != "\r" && !intReg.test(pKey)) //엔터 키 및 regkey가 아닐경우 리턴 event.returnValue = false; delete intReg; } /** * 페이지 초기화시 -,숫자 입력받기( - 키코드값 189) */ function setKeydownMoney() { if (event.shiftKey == true) event.returnValue = false; if ((event.keyCode >= 48 && event.keyCode <= 57) || (event.keyCode >= 96 && event.keyCode <= 105)) { //숫자 키코드값 return true; } else { // enter, tab, backspace 방향키(앞,뒤),delete는 예외처리 if(event.keyCode == 8 || event.keyCode == 9 || event.keyCode == 37 || event.keyCode == 39 || event.keyCode == 189 || event.keyCode == 46) return true; event.returnValue = false; } return false; } /** * 페이지 초기화 시에 금액 형태일 경우 키 입력시 금액 형태로 전환 */ function setKeypressMoney() { var ev = event.srcElement; var tempV = ev.value; if (tempV.length > 0) { var stat = true; while (stat) { if (tempV.length > 0 && tempV.substring(0, 1) == 0) tempV = tempV.substr(1); else stat = false; } } var moneyReg = new RegExp('(-?[0-9]+)([0-9]{3})'); tempV = tempV.replace(/\,/g, ""); while (moneyReg.test(tempV)) tempV = tempV.replace(moneyReg, '$1,$2'); ev.value = tempV; if (event.keyCode == 9) ev.select(); } /** * 실수형 금액 입력제어 스크립트. 숫자 , . , - 값만 입력받음. 소수점 두째 자리까지만 입력됨 */ function setKeydownFloatMoney() { if (event.shiftKey == true) event.returnValue = false; var floatindex = event.srcElement.value.indexOf("."); if (floatindex != -1) { var floatNum = event.srcElement.value.substring(floatindex + 1); if (event.keyCode == 8) return; else if (floatNum.length > 1) event.returnValue = false; } if ((event.keyCode >= 48 && event.keyCode <= 57) || (event.keyCode >= 96 && event.keyCode <= 105)) { //숫자 키코드값 return true; } else { if (event.keyCode == 8 || event.keyCode == 9 || event.keyCode == 37 || event.keyCode == 39 || event.keyCode == 189) return true; else if(event.keyCode == 190 && floatindex == -1) return; event.returnValue = false; } } /** * 키 입력시 float 타입의 금액 형태로 전환 */ function setFloatMoney() { var ev = event.srcElement; var tempV = ev.value; var floatnum = "" if (tempV.indexOf(".") != -1) { floatnum = tempV.substring(tempV.indexOf(".")); tempV = tempV.substring(0,tempV.indexOf(".")); } var moneyReg = new RegExp('(-?[0-9]+)([0-9]{3})'); tempV = tempV.replace(/\,/g, ""); while(moneyReg.test(tempV)) { tempV = tempV.replace(moneyReg, '$1,$2'); } ev.value = tempV + floatnum; if (event.keyCode == 9) ev.select(); }