![]() |
#2
jiangkexi2010-04-25 18:06
javascript实现的checkbox选中方法的代码如下:
<script language="javascript" type="text/javascript"> function postBackByObject() { var element = window.event.srcElement; if(window.event.button==0) if (!IsCheckBox(element)) return; var isChecked = element.checked; var tree = TV2_GetTreeById("TreeView"); var node = TV2_GetNode(tree,element); TV2_SetChildNodesCheckStatus(node,isChecked); var parent = TV2_GetParentNode(tree,node); TV2_NodeOnChildNodeCheckedChanged(tree,parent,isChecked); } //set child nodes checkbox status function TV2_SetChildNodesCheckStatus(node,isChecked) { var childNodes = TV2i_GetChildNodesDiv(node); if(childNodes == null) return; var inputs = WebForm_GetElementsByTagName(childNodes,"INPUT"); if(inputs == null || inputs.length == 0) return; for(var i = 0; i < inputs.length; i++) { if(IsCheckBox(inputs[i])) inputs[i].checked = isChecked; } } //change parent node checkbox status after child node changed function TV2_NodeOnChildNodeCheckedChanged(tree,node,isChecked) { if(node == null) return; var childNodes = TV2_GetChildNodes(tree,node); if(childNodes == null || childNodes.length == 0) return; var isAllSame = true; for(var i = 0; i < childNodes.length; i++) { var item = childNodes[i]; var value = TV2_NodeGetChecked(item); if(isChecked != value) { isAllSame = false; break; } } var parent = TV2_GetParentNode(tree,node); if(isAllSame) { TV2_NodeSetChecked(tree,node,isChecked); TV2_NodeOnChildNodeCheckedChanged(tree,parent,isChecked); } else { TV2_NodeSetChecked(tree,node,false); TV2_NodeOnChildNodeCheckedChanged(tree,parent,false); } } //get node relative element(etc. checkbox) function TV2_GetNode(tree,element) { var id = element.id.replace(tree.id,""); id = id.toLowerCase().replace(element.type,""); id = tree.id + id; var node = document.getElementById(id); if(node == null) //leaf node, no "A" node return element; return node; } //get parent node function TV2_GetParentNode(tree,node) { var div = WebForm_GetParentByTagName(node,"DIV"); //The structure of node: <table>information of node</table><div>child nodes</div> var table = div.previousSibling; if(table == null) return null; return TV2i_GetNodeInElement(tree,table); } //get child nodes array function TV2_GetChildNodes(tree,node) { if(TV2_NodeIsLeaf(node)) return null; var children = new Array(); var div = TV2i_GetChildNodesDiv(node); var index = 0; for(var i = 0; i < div.childNodes.length; i++) { var element = div.childNodes[i]; if(element.tagName != "TABLE") continue; var child = TV2i_GetNodeInElement(tree,element); if(child != null) children[index++] = child; } return children; } function TV2_NodeIsLeaf(node) { return !(node.tagName == "A"); //Todo } function TV2_NodeGetChecked(node) { var checkbox = TV2i_NodeGetCheckBox(node); return checkbox.checked; } //判断:只要该节点有一个字节点被选中,则该节点一定被选中 function TV2_NodeSetChecked(tree,node,isChecked) { var checkbox = TV2i_NodeGetCheckBox(node); if(checkbox != null) { var childNodes = TV2_GetChildNodes(tree,node); for(var i = 0; i < childNodes.length; i++) { var item = childNodes[i]; var value = TV2_NodeGetChecked(item); if(value) { isChecked = true ; break; } } checkbox.checked = isChecked; } } function IsCheckBox(element) { if(element == null) return false; return (element.tagName == "INPUT" && element.type.toLowerCase() == "checkbox"); } function Isselectnode(element) { if(element == null) return false; return (element.tagName == "A" && element.class =="TreeView_0" ); } //get tree function TV2_GetTreeById(id) { return document.getElementById(id); } ////////////////////////////////////////////////////////////////////////////////////////////// //private mothods, with TV2i_ prefix ////////////////////////////////////////////////////////////////////////////////////////////// //get div contains child nodes function TV2i_GetChildNodesDiv(node) { if(TV2_NodeIsLeaf(node)) { return null; } var childNodsDivId = node.id + "Nodes"; return document.getElementById( childNodsDivId ); } //find node in element function TV2i_GetNodeInElement(tree,element) { var node = TV2i_GetNodeInElementA(tree,element); if(node == null) { node = TV2i_GetNodeInElementInput(tree,element); } return node; } //find "A" node function TV2i_GetNodeInElementA(tree,element) { var as = WebForm_GetElementsByTagName(element,"A"); if(as== null || as.length == 0) return null; var regexp = new RegExp("^" + tree.id + "n\\d+$"); for(var i = 0; i < as.length; i++) { if(as[i].id.match(regexp)) { return as[i]; } } return null; } //find "INPUT" node function TV2i_GetNodeInElementInput(tree,element) { var as = WebForm_GetElementsByTagName(element,"INPUT"); if(as== null || as.length == 0) return null; var regexp = new RegExp("^" + tree.id + "n\\d+"); for(var i = 0; i < as.length; i++) { if(as[i].id.match(regexp)) { return as[i]; } } return null; } //get checkbox of node function TV2i_NodeGetCheckBox(node) { if(IsCheckBox(node)) return node; var id = node.id + "CheckBox"; return document.getElementById(id); } function SelectType_onchange() { if(SelectType.options(0).Text == "Calico") ; } </script> 服务器端代码 protected void Page_Load(object sender, EventArgs e) { if (!Page.IsPostBack) { TreeView.Attributes.Add("onclick", "postBackByObject()"); if (Request.QueryString["BARCODE"] != null) { barcode = Request.QueryString["BARCODE"].ToString(); //判断是否是自己发起的任务 //disabledButton(Rid); Bind(); } if (Request.QueryString["flag"] != null) { if (Request.QueryString["flag"].ToString() == "1") { VisibleBtn(); } } } } |
左面是带checkbox的TreeView ,右边是Image,TreeView 的叶子节点的value保存了右边图片的路径,实现单击TreeView 的叶子节点右边图片显示相应的图片。
现在通过javascript已经实现了checkbox选中的方法,但是使用selectedchang事件的时候,javascript实现的checkbox选中方法又不起作用,求帮忙。