<script language="javascript" type="text/javascript"> var OnNodeChecked; var OnInit; function client_OnTreeNodeChecked() { var element = event.srcElement; if (element.tagName =="INPUT"&& element.type =="checkbox") { var checkedState = element.checked; while (element.tagName !="TABLE") // Get wrapping table { element = element.parentElement; } setChildCheck(element,checkedState); setParentCheck(element,checkedState); if (OnInit) { OnInit(); } var tree = document.getElementById("TreeView1"); FindCheckedFromNode(tree) } } function FindCheckedFromNode(node) { var element = node; if (element ==null) return; var a; var childTables = element.getElementsByTagName("TABLE"); for (var tableIndex =0; tableIndex < childTables.length; tableIndex++) { var checkboxIndex = childTables[tableIndex].rows[0].cells.length -1; var cell = childTables[tableIndex].rows[0].cells[checkboxIndex]; var checkboxes = cell.getElementsByTagName("INPUT"); if (checkboxes.length ==1&& checkboxes[0].checked) { a = a + childTables[tableIndex].rows[0].innerText; AddChecked(childTables[tableIndex]); } } } function AddChecked(table) { if (OnNodeChecked) OnNodeChecked(table); } function setChildCheck(table,checkedState) { var element = table.nextSibling; if (element ==null) // If no childrens than exit return; var childTables = element.getElementsByTagName("TABLE"); for (var tableIndex =0; tableIndex < childTables.length; tableIndex++) { checkTable(childTables[tableIndex], checkedState); } } function setParentCheck(table,checkedState) { if (table ==null|| table.rows[0].cells.length ==2) // This is the root { return; } var parentTable = table.parentElement.previousSibling; if (checkedState) { checkTable(parentTable, checkedState); } else { checkBrother(parentTable,checkedState) } setParentCheck(parentTable,checkedState); } function checkTable(table, checked) { var checkboxIndex = table.rows[0].cells.length -1; var cell = table.rows[0].cells[checkboxIndex]; var checkboxes = cell.getElementsByTagName("INPUT"); if (checkboxes.length ==1) { checkboxes[0].checked = checked; } } function checkBrother(parentTable,checkedState) { var bChecked =true; var element = parentTable.nextSibling; if (element ==null) // If no childrens than exit return; var childTables = element.getElementsByTagName("TABLE"); for (var tableIndex =0; tableIndex < childTables.length; tableIndex++) { var checkboxIndex = childTables[tableIndex].rows[0].cells.length -1; var cell = childTables[tableIndex].rows[0].cells[checkboxIndex]; var checkboxes = cell.getElementsByTagName("INPUT"); if (checkboxes.length ==1&& checkboxes[0].checked) { bChecked =false; break; } } if(bChecked) { checkTable(parentTable,checkedState); } else { setParentCheck(parentTable,!checkedState); } }; //前台调用 var value=''; OnNodeChecked = fnDoNodeChecked; OnInit = fnDoInit; function fnDoInit() { value =""; } function fnDoNodeChecked(table) { value = value + table.rows[0].innerText; alert(value); } </script>