json 데이터를 가지고 와서 form 화면을 채우거나 modal창의 form내용을 초기화 해야 하는 경우 사용하는 javascript 소스 입니다.
(공통 소스가 필요해서 작업 했는데 추후 수정을 더 해서 계속 갱신할 예정 입니다.)
아래 나오는 targetObj 는 document.getElementById() 로 가지고온 최상위 노드 입니다.
--json -> input
--json key값을 기준으로 input태그 및 select등의 정보를 가지고 와서 데이터 셋팅(json key=input name이 동일 합니다.)
let keys = Object.keys(jsonData);
for (let i = 0; i < keys.length; i++) {
let key = keys[i];
let chilNode = targetObj.querySelector('input[name="'+key+'"]');
if(chilNode==null || chilNode==undefined){chilNode = targetObj.querySelector('select[name="'+key+'"]');}
if(chilNode==null || chilNode==undefined){chilNode = targetObj.querySelector('textarea[name="'+key+'"]');}
if(chilNode!=null && chilNode!=undefined){
inputSetData(key, chilNode, jsonData[key]);
}
}
--전달 받은 input name, 대상node, 설정할 값을 기준으로 type에 맞춰서 데이터를 설정
function inputSetData(targetName, targetObj, targetValue){
if(targetObj.type=="text" || targetObj.type=="textarea"){
targetObj.value = targetValue;
}else if(targetObj.type=="select-one" && targetObj.options!= undefined && targetObj.options.length>0){
for(let i = 0; i < targetObj.options.length; i++) {
if(targetObj.options[i].value==targetValue){
targetObj.options[i].selected = true;
}
}
}else if(targetObj.type=="checkbox" && targetObj!= undefined){
let checkBoxList = document.getElementsByName(targetName);
if(checkBoxList.length>0){
for(let i = 0; i < checkBoxList.length; i++) {
if(checkBoxList[i].value==targetValue){checkBoxList[i].checked=true;}
}
}
}else if(targetObj.type=="radio" && targetObj!= undefined){
let radioList = document.getElementsByName(targetName);
if(radioList.length>0){
for(let i = 0; i < radioList.length; i++) {
if(radioList[i].value==targetValue){radioList[i].checked=true;}
}
}
}
}
--input 초기화
--input 태그 리스트 수집 최상위 노드 하위 노드를 전체 검색 text, select등의 정보를 수집 합니다.
function inputChildList(targetObj, inputList){
let inputChildren = targetObj.children;
if(inputChildren.length>0){
for(let i = 0; i < inputChildren.length; i++) {
if(inputChildren[i].type!=undefined && (inputChildren[i].type=="text" || inputChildren[i].type=="select-one" || inputChildren[i].type=="checkbox" || inputChildren[i].type=="radio" || inputChildren[i].type=="textarea")){
inputList.push(inputChildren[i]);
}
inputChildList(inputChildren[i], inputList);
}
}
}
--대상 노드의 데이터를 초기화 합니다.
function inputReSetData(targetObj){
if(targetObj.type=="text" || targetObj.type=="textarea"){
targetObj.value = "";
}else if(targetObj.type=="select-one" && targetObj.options!= undefined && targetObj.options.length>0){
targetObj.options[0].selected = true;
}else if(targetObj.type=="checkbox" && targetObj!= undefined){
let checkBoxList = document.getElementsByName(targetObj.name);
if(checkBoxList.length>0){
for(let i = 0; i < checkBoxList.length; i++) {
checkBoxList[i].checked=false;
}
}
}else if(targetObj.type=="radio" && targetObj!= undefined){
let radioList = document.getElementsByName(targetObj.name);
if(radioList.length>0){
for(let i = 0; i < radioList.length; i++) {
radioList[i].checked=false;
}
}
}
}
let inputList = [];
inputChildList(targetObj, inputList);
for(let i = 0; i < inputList.length; i++) {
inputReSetData(inputList[i]);
}
'javascript' 카테고리의 다른 글
ajax 호출 공통 코드 (0) | 2021.07.14 |
---|---|
jquery validation사용한 form 유효성 체크(alert, focus, display) (0) | 2021.07.05 |
alert, confirm,loding,page block sweetalert2 이용하기 (0) | 2021.06.30 |
jquery ajax 시작,종료,완료에 대한 공통처리 (0) | 2021.06.24 |
jsGrid to json 변환 (0) | 2021.06.02 |