When nodes are checked using client side code, everything seems to work fine. However, if a child node was checked when the page was loaded and only client-side code is used to uncheck it, the node is reported back to the server as being checked.
Is it possible that unchecking a node isn't successfully tracked by trackChanges() and commitChanges()?
Here's the client-side code I'm using:
function onUnitNodeChecked(sender, eventArgs){
var node = eventArgs.get_node();
var childNodes = node.get_nodes();
if (childNodes.get_count() == 0) {return;}
var tree= $find("<%= tvUnits.ClientID %>");
tree.trackChanges();
if (node.get_checked()){
checkAllNodes(childNodes, true);
} else {
checkAllNodes(childNodes, false);
}
tree.commitChanges();
}
function checkAllNodes(nodes, check){
for (var i=0; i<nodes.get_count(); i++){
var node = nodes.getNode(i);
if (check){
node.set_checked(true);
node.set_enabled(false);
} else {
node.set_enabled(true);
node.set_checked(false);
}
checkAllNodes(node.get_nodes(), check);
}
}