English (United States) English (United Kingdom) English (Eire)
You are here:   Home
Register  |  Login
 Links
Minimize
 Blog_Archive
Minimize
Archive
<February 2012>
SunMonTueWedThuFriSat
2930311234
567891011
12131415161718
19202122232425
26272829123
45678910
Monthly
August, 2010
Aug 14

Written by: kevin attard
14/08/2010 17:26

I found this very good script which does exactly what I need, all i had to do was to comment a line.  Congrats pushpontech for sharing his code:

 

Add the following in the treeview

 

onclick="OnTreeClick(event);"

 

And the rest in the javascript file

 

function OnTreeClick(evt) {

    var src = window.event != window.undefined ? window.event.srcElement : evt.target;

    var isChkBoxClick = (src.tagName.toLowerCase() == "input" && src.type == "checkbox");

    if (isChkBoxClick) {

        var parentTable = GetParentByTagName("table", src);

        var nxtSibling = parentTable.nextSibling;

        if (nxtSibling && nxtSibling.nodeType == 1)//check if nxt sibling is not null & is an element node

        {

            if (nxtSibling.tagName.toLowerCase() == "div"//if node has children

            {

                //check or uncheck children at all levels

                CheckUncheckChildren(parentTable.nextSibling, src.checked);

            }

        }

        //check or uncheck parents at all levels

        //CheckUncheckParents(src, src.checked);

        //This is the line which I had to comment in order to have the behaviour I needed

    }

}

 

function CheckUncheckChildren(childContainer, check) {

    var childChkBoxes = childContainer.getElementsByTagName("input");

    var childChkBoxCount = childChkBoxes.length;

    for (var i = 0; i < childChkBoxCount; i++) {

        childChkBoxes[i].checked = check;

    }

}

 

function CheckUncheckParents(srcChild, check) {

    var parentDiv = GetParentByTagName("div", srcChild);

    var parentNodeTable = parentDiv.previousSibling;

 

    if (parentNodeTable) {

        var checkUncheckSwitch;

 

        if (check) //checkbox checked

        {

            var isAllSiblingsChecked = AreAllSiblingsChecked(srcChild);

            if (isAllSiblingsChecked)

                checkUncheckSwitch = true;

            else

                return//do not need to check parent if any child is not checked

        }

        else //checkbox unchecked

        {

            checkUncheckSwitch = false;

        }

 

        var inpElemsInParentTable = parentNodeTable.getElementsByTagName("input");

        if (inpElemsInParentTable.length > 0) {

            var parentNodeChkBox = inpElemsInParentTable[0];

            parentNodeChkBox.checked = checkUncheckSwitch;

            //do the same recursively

            CheckUncheckParents(parentNodeChkBox, checkUncheckSwitch);

        }

    }

}

 

function AreAllSiblingsChecked(chkBox) {

    var parentDiv = GetParentByTagName("div", chkBox);

    var childCount = parentDiv.childNodes.length;

    for (var i = 0; i < childCount; i++) {

        if (parentDiv.childNodes[i].nodeType == 1) //check if the child node is an element node

        {

            if (parentDiv.childNodes[i].tagName.toLowerCase() == "table") {

                var prevChkBox = parentDiv.childNodes[i].getElementsByTagName("input")[0];

                //if any of sibling nodes are not checked, return false

                if (!prevChkBox.checked) {

                    return false;

                }

            }

        }

    }

    return true;

}

 

//utility function to get the container of an element by tagname

function GetParentByTagName(parentTagName, childElementObj) {

    var parent = childElementObj.parentNode;

    while (parent.tagName.toLowerCase() != parentTagName.toLowerCase()) {

        parent = parent.parentNode;

    }

    return parent;

}

 

Tags:

Your name:
Title:
Comment:
Security Code
Enter the code shown above in the box below
Add Comment    Cancel