您好,欢迎访问一九零五行业门户网

用js脚本控制asp.net下treeview的NodeCheck的实现代码_javascript技巧

增加checkbox联动的情况选择:
1.单选treeview中的任一节点
2.当一节点checkbox属性值改变时:子节点的checkbox属性值跟随其改动,父节点不变;
父节点的所有子节点的checkbox属性值都为false时才为false;有一个子节点的checkbox属性值true时则为true.
3.当一节点checkbox属性值改变时:子节点、父节点的checkbox属性值跟随其改动;
父节点的所有子节点的checkbox属性值都为false时才为false;有一个子节点的checkbox属性值true时则为true.
javascript代码
复制代码 代码如下:
function ontreenodechecked(id, type) {
//获取触发事件的对象
var element = window.event.srcelement;
//如果对象不是checkbox则不处理
if (!ischeckbox(element))
return;
//获取checked状态
var ischecked = element.checked;
//获取tree对象
var tree = tv2_gettreebyid(id);
//获取element的相对结点(如果是叶结点,则就为element,否则为其结点)
var node = tv2_getnode(tree, element);
switch (type) {
case 1:
setnodesunchecked(tree);
element.checked = true;
break;
case 2:
tv2_setchildnodescheckstatus(node, ischecked);
break;
case 3:
tv2_setchildnodescheckstatus(node, ischecked);
var parent = tv2_getparentnode(tree, node);
tv2_nodeonchildnodecheckedchanged(tree, parent, ischecked);
}
}
//set all nodes checkbox nochecked
function setnodesunchecked(treenode) {
var inputs = webform_getelementsbytagname(treenode, input);
if (inputs == null || inputs.length == 0)
return;
for (var i = 0; i if (ischeckbox(inputs[i]))
inputs[i].checked = false;
}
}
//set child nodes checkbox status
function tv2_setchildnodescheckstatus(node, ischecked) {
//返回当前node所在的div层
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 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 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(node, ischecked);
tv2_nodeonchildnodecheckedchanged(tree, parent, ischecked);
}
else {
tv2_nodesetchecked(node, true);
tv2_nodeonchildnodecheckedchanged(tree, parent, true);
}
}
//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: information of node
child nodes
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 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(node, ischecked) {
var checkbox = tv2i_nodegetcheckbox(node);
if (checkbox != null)
checkbox.checked = ischecked;
}
function ischeckbox(element) {
if (element == null)
return false;
return (element.tagname == input && element.type.tolowercase() == checkbox);
}
//get tree
function tv2_gettreebyid(id) {
return document.getelementbyid(id);
}
//////////////////////////////////////////////////////////////////////////////////////////////
//private mothods, with tv2i_ prefix
//////////////////////////////////////////////////////////////////////////////////////////////
//get div contains child nodes
function tv2i_getchildnodesdiv(node) {
//如果node.tagname == a则不处理
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 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 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);
}
html代码
复制代码 代码如下:
showlines=true borderwidth=0px height=430px width=250px font-size=small
onclick=ontreenodechecked()>
其它类似信息

推荐信息