728x90
반응형
728x90
반응형
728x90
반응형

먼저 zTree 사용에 대한 기존 포스트가 있다.

해당 내용에 추가되는 내용이므로 zTree 사용방법을 모른다면 기존 포스트를 확인하기 바란다.

* [jquery] zTree plugin (tree view) : https://deonggi.tistory.com/110

 

# tree에 checkbox 추가를 위한 설정

1
2
3
4
5
6
7
8
9
10
11
12
var setting = {
    check : {
        enable: true,               // 체크박스 사용시
        chkDisabledInherit: true    // 체크박스 disabled 사용시
    },
    callback : {
        onClick: function(srcEvent, treeId, node, clickFlag) {
            // 클릭시 check toggle 처리
            zTreeObj.checkNode(node, nullfalse, $("#callbackTrigger").attr("checked"));                    
        },
    }
};
cs

 

개인적인 필요로 인해 2가지를 적용했다.

 

1. 코드로 check, uncheck 적용

내 경우 node 클릭 시 toggle로 checkbox 컨트롤이 필요해서 callback.onClick에 코드(위 소스의 9번 라인)가 추가 되었다.

 

* 참고 checkNode의 매개변수 설명

1
2
3
4
zTreeTools.checkNode = function (node, checked, checkTypeFlag, callbackFlag)
// checked : check여부, toggle 시 null
// checkTypeFlag : 하위 댑스가 있을때 하위 댑스도 check여부
// callbackFlag : $("#callbackTrigger").attr("checked") 
cs

 

2. disabled 적용

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
/**
* zTree node ~ 하위node의 chkDisabled을 수정하기 위한 재귀함수
 * @param node
 * @param key
 * @returns
 */
function updateChkDisabled(node, key){
    
    if (typeof key != 'undefined' && key == 'reset') {        
        if (node.useYn == 'N') node.chkDisabled = true;    
        else delete node.chkDisabled; 
    } else {
        node.chkDisabled = true;        
    }
    
    zTreeObj.updateNode(node);
    $.each(node.children, function(index, subNode){
        updateChkDisabled(subNode, key);
    });
}
 
// chkDisabled all reset
$.each(zTreeObj.getNodes(), function(i, node){
    updateChkDisabled(node, 'reset');
});
 
/**
 * 타입에 따라 트리 disabled 처리
 * @param tp
 * @returns
 */
function changeChkDisabled(tp){    
    
    if(typeof tp != 'undefined') {
        if (tp != 'SUPER') {
            $.each(zTreeObj.getNodes(), function(i, node){
                if(node.tp == 'SUPER') updateChkDisabled(node, tp);
            });
        }      
    } 
}
cs

포인트는 node.chkDisabled = true로 처리하면 된다. 필요가 없다면 delete.

또한 해당 기능은 disabled 시 하위 node까지 동일 해야 한다.

1) 10번 라인은 내가 필요해 의해 넣은 내용으로 리셋시 useYn가 N이라면 disabled 처리

2) 23~25번 라인은 전체 리셋시 실행

3) 32~41번 라인은 tp가 'SUPER'가 아닌 경우, node.tp가 SUPER 이외의 것을 가진 node ~ 하위node 모두를 disabled 처리

4) 해당 소스는 23~25번을 먼저 호출하고, 상황에 따라(tp) 37번 라인 실행

 

다시 내 중심적으로 적은 내용이니, 다른 분들께서 사용하신다면 상황에 맞게 수정하여 사용하시면 되시겠다.

 

 

 

* 관련글

[jquery] zTree plugin (tree view)https://deonggi.tistory.com/110

[jQuery] zTree node children, updateNode() : https://deonggi.tistory.com/113

 

 

 

728x90
반응형
728x90
반응형

1. zTree 최하위 여부 체크 방법

1
2
3
4
5
6
7
8
9
// zTree를 초기화
var zTreeObj = $.fn.zTree.init($("#treeView"), setting);
 
var checkNodes = zTreeObj.getCheckedNodes(true);
$.each(checkNodes, function(index, node){
    if (typeof node.children == 'undefined') {
        // 최하위 일때 프로세스
    }
});
cs

 

 

2. zTree 하위까지 update 하기

1
2
3
4
5
6
7
8
9
10
11
12
13
14
$.each(zTreeObj.getNodes(), function(index, node){
    updateChkDisabled(node);
});
 
function updateChkDisabled(node){
    // node 정보 변경 및 update
    node.chkDisabled = true;
    zTreeObj.updateNode(node);
 
    // 재귀함수로 하위 node 정보 변경 및 update
    $.each(node.children, function(index, sNode){
        updateChkDisabled(sNode);
    });
}
cs

 

 

 

* 관련글
[jquery] zTree plugin (tree view) : https://deonggi.tistory.com/110

[jquery, zTree] zTree의 checkbox 사용 : https://deonggi.tistory.com/118

 

 

728x90
반응형
728x90
반응형

뎁스가 있는 데이터를 관리할 화면이 필요했고, 인지하기 쉽게 윈도우 폴더 트리구조의 jquery 플러그인이 필요했다.

여러가지 적용해보고 쉽게 적용할 수 있는 플러그인을 찾아서 기록해 둔다.

 

# zTree 다운로드 링크, 데모와 document 링크

# 사용한 버전 :  v3.5.46

 

1. json 데이터로 간단한 트리 만들기

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
var zNodes =[
    { 
      id: 1// unique ID
      pId: 0// parent ID
      name"Name"
      t: "Description"
      open: true // open this node on page load
    },
    { 
      id: 11
      pId: 1
      name"Node 1-1"
      t: "This is Node 1-1"
    },
    { 
        id: 12
        pId: 1
        name"Node 1-2"
        t: "This is Node 1-2"
    },
];
   
var setting = {
        data: {
          key: {
            title:"t"
          },
          simpleData: {
            enable: true
          }
        },
        // more settings here
    };
 
zTreeObj = $.fn.zTree.init($("#treeView"), setting, zNodes);
cs

 

2. ajax으로 받은 데이터로 트리 만들기

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
$(document).ready(function() {
    var setting = {
            data: {
                key: {
                    title:"t"
                },
                simpleData: {                    
                    enable: true
                }
            },
            async: {
                enable: true,
                type: "GET",
                url: AJAX_CALL_URL,
//                autoParam:["id", "name=n", "level=lv"],
//                otherParam:{"otherParam":"zTreeAsyncTest"},
               dataFilter: filter,
            },
            callback : {
                beforeClick : function(treeId, treeNode){                    
                },
                beforeAsync: function(treeId, treeNode){
                },
                onAsyncError: function(event, treeId, treeNode, XMLHttpRequest, textStatus, errorThrown) {
                },
                onAsyncSuccess: function(event, treeId, treeNode, msg){
                },
                onNodeCreated: function(event, treeId, treeNode){                    
                },
                onClick: function(srcEvent, treeId, node, clickFlag){
                },
            }
    };
    zTreeObj = $.fn.zTree.init($("#treeView"), setting);
 
});
 
function filter(treeId, parentNode, childNodes) {
    if (!childNodes) return null;
    for (var i=0, l=childNodes.length; i<l; i++) {
        childNodes[i].name = childNodes[i].name.replace(/\.n/g, '.');
    }
    return childNodes;
}
cs

주의사항

1) 1의 zNodes와 같은 형태의 값을 리턴해 줄 것

2) AJAX_CALL_URL은 ajax url 값

3) dataFilter: filter 는 ajax 응답 후 필요한 데이터 처리가 있는 경우의 셈플

4) 전체 갱신이 필요한 경우 아래와 같이 사용

1
zTreeObj.reAsyncChildNodes(false'refresh'nullnull);
cs

5) 일부 갱신이 필요한 경우(트리최상위 node중 첫번째 node 아래로 전체 리플래시 됨) 

1
2
3
4
var nodes = zTreeObj.getNodes();
if (nodes.length>0) {
    zTreeObj.reAsyncChildNodes(nodes[0], "refresh"nullnull);
}
cs

6) 트리에서 선택한 항목의 데이터 얻기

1
var node = zTreeObj.getSelectedNodes();
cs

 

 

주석 처리된 부분은 데모에 있는 내용이었지만 아직 사용해 보지 않았기에 주석처리 했다.

 

 

* 관련글

[jQuery] zTree node children, updateNode() https://deonggi.tistory.com/113

[jquery, zTree] zTree의 checkbox 사용 : https://deonggi.tistory.com/118

 

 

 

728x90
반응형
728x90
반응형

기존에 썼던 코드를 그대로 가져와서 적은거라 좀 장황한데

 

# 셈플1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
function AddCareerLine(){
    var cnt = $('.career').length;
 
    // textarea 추가
    var nCareer = document.createElement("textarea");
    var sName = 'careerList['+ cnt +'].career';
    var sId = 'career'+cnt;
    nCareer.setAttribute("rows"3);
    nCareer.setAttribute("cols"120);
    nCareer.setAttribute("name", sName);
    nCareer.setAttribute("id", sId);
    nCareer.setAttribute("class""career");
    document.getElementById("tchrCreear").appendChild(nCareer);
 
    // 줄바꿈
    var tagBr = document.createElement("br");
    document.getElementById("tchrCreear").appendChild(tagBr);
}
 
function DeleteCareerLine(){
    var cnt = $('.career').length;
 
    // textarea가 2개 이상인 경우 마지막 textarea를 삭제
    if (cnt > 1) {
        var sId = 'career' + (cnt-1);
        $('#'+sId).remove();
    }else {
        console.log('textarea count : 1');
    }
}
cs

 

javascript로 만드는 건데

태그를 만들고 var nCareer = document.createElement("textarea");

태그의 속성을 지정한다 nCareer.setAttribute("rows"3);

마지막으로 특정 태그 하위에 자식으로 넣어준다. document.getElementById("tchrCreear").appendChild(nCareer);

삭제는 jquery를 썼는데 이렇게 삭제한다. $('#'+sId).remove();

 

 

# 셈플2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
// 재료 입력 div 추가
function addMaterialfrm(){
    
    var addIndex = $("#main_nextIndex").val();
    $("#main_nextIndex").val(Number(addIndex) + 1 );
 
    var addDivTag = "<div id='main_div_" + addIndex + "' style='margin-bottom: 5px;'>";
    addDivTag += "<input type='text' name='main[" + addIndex + "].mtrlNm' id='main[" + addIndex + "].mtrlNm' placeholder='재료명' style='width:250px;margin-right: 22px;'>";
    addDivTag += "<input type='text' name='main[" +addIndex + "].qty' id='main[" + addIndex + "].qty' placeholder='수랑' style='width:250px;margin-right:5px;'>";
    addDivTag += "<input type='hidden' name='main[" +addIndex + "].mtrlSeq' id='main[" + addIndex + "].mtrlSeq' value='0'/>";
    addDivTag += "<input type='hidden' name='main[" +addIndex + "].mtrlTp' id='main[" + addIndex + "].mtrlTp' value='main'/>";
    addDivTag += "<button type='button' class='btn btn-danger btn-sm' onclick='delMaterialfrm(`main`, " + addIndex +")'><i class='glyphicon glyphicon-minus'></i></button>";
    addDivTag += "</div>";
 
    $("#main_span").append(addDivTag);
 
}
// 재료 입력 div 삭제
function delMaterialfrm(id){
 
    var delDivId = "main_div_" + id;
    $("#"+delDivId).remove();
 
}
cs

 

이건 그냥 스트링으로 하나하나 써서 만든 경우.

복잡해 보이지만 사실 간단한 내용으로 스트링으로 태그를 모두 작성하고

마지막에 jquery로 특정 태그 하위에 추가한다. $("#main_span").append(addDivTag);

 

* 관련글

[javascript, jquery] 동적 tag 추가시 이벤트 : https://deonggi.tistory.com/119

 

 

728x90
반응형

'코딩 삽질' 카테고리의 다른 글

[oracle] link db  (0) 2019.11.17
[git] remote 추가  (0) 2019.11.17
[javascript] ckeditor 유효성 체크  (0) 2019.11.06
[메모] 네이버 클라우드 서버 - 윈도우 서버 세팅  (0) 2019.11.06
[tomcat] memory leak 에러  (0) 2019.11.05

+ Recent posts