(转)对微软那棵TreeView进行试用,主要是对CheckBox进行操作
总结这次的工作,明白了几个关键的地方:
1.如果在服务器端进行CheckBox的初始化,这样操作就会导致在客户端进行node.getAttribute("checked")时总是得到True,这样就达不到客户端操作的目的.
2.如果想在生成树的时候对某些节点进行CheckBox的初始化选中,就需要在客户端进行遍历树的操作(构造生成树的同时进行).
3.在客户端对树的节点进行选中与取消选中的操作时,必须同时进行一个必要的操作:Tree.queueEvent('oncheck',node.getNodeIndex()),这样做的目的使你在客户端进行树操作的同时,能让服务器端也同时知道操作了哪些节点,以便在服务器端进行遍历的同时能知道哪些节点被选中.
4.以及'checked'的大小写问题也会对树的状态改变有所影响.
之后又对代码进行了优化,我把生成树时的初始化操作,以及保存选中状态都放在了客户端进行!
第一次发表文章,请各位前辈多多指导,多多帮助
var strList = "";
function tree_oncheck()
{
var ChildNode = new Array();
var node = document.getElementById("TreeView1").getTreeNode(event.treeNodeIndex);
var Pchecked = node.getAttribute("checked");
ChildNode = node.getChildren();
if( parseInt( ChildNode.length ) != 0 )
{
node.setAttribute("checked",!Pchecked);
return;
}
setParent(node,Pchecked);
document.getElementById("TreeView1").queueEvent('oncheck',node.getNodeIndex());
}
//===============================================//
//在点击子节点时,让父节点的状态也随子节点的状态而变化
//===============================================//
function setParent(el,state)
{
var ParentNode = el.getParent();
if(ParentNode)
{
//检查el的兄弟节点状态
if(!checkSiblingdNode(el))
{
ParentNode.setAttribute('checked',state);
setParent(ParentNode,state);
}
}
}
//===========================================//
//检查兄弟节点状态
//===========================================//
function checkSiblingdNode(el)
{
var parentNode = el.getParent();
var childNodes = new Array();
childNodes = parentNode.getChildren();
for(var i=0;i< childNodes.length; i++)
{
if(el.getNodeIndex() != childNodes[i].getNodeIndex())
{
if(childNodes[i].getAttribute("Checked"))
{
return true;
}
}
}
return false;
}
//=============================================//
//点击父节点时,对其子节点状态进行同步改变
//=============================================//
function setcheck(node,Pc)
{
var ChildNode = new Array();
ChildNode = node.getChildren();
if( parseInt(ChildNode.length) != 0 )
{
for( var i=0; i<ChildNode.length;i++ )
{
var cNode = ChildNode[i];
if( cNode.getAttribute("checked") != Pc )
{
if( parseInt( cNode.getChildren().length ) != 0 )
setcheck(cNode,Pc);
cNode.setAttribute("checked",Pc);
document.getElementById("TreeView1").queueEvent('oncheck',cNode.getNodeIndex());
}
}
}
}
//==========================================//
//需要对某些节点做初始化处理时
//==========================================//
function onload()
{
var node
var nextNode = 0;
var childNodes = new Array();
var childNodes = document.getElementById("TreeView1").getChildren();
SetArray();//把节点ID组合为一个数组
for(var i=0;i<childNodes.length;i++)
{
SetTree(childNodes[i]);
}
}
//============================================//
//组合数组
//============================================//
function SetArray()
{
var IndexStart = 0;
var IndexEnd = 0;
var ArrIndex = 0;
var SignStr = "";
//var SpanString = "0001,00010001,000100010001,";
var SpanString = document.getElementById("H_IncomeCode").value;
var strLen = SpanString.length;
while( IndexEnd < strLen )
{
SignStr = SpanString.substr(IndexEnd,1);
if( SignStr == "," )
{
var TempString = SpanString.substr(IndexStart,IndexEnd-IndexStart);
strArray[ArrIndex] = TempString;
IndexStart = IndexEnd + 1;
ArrIndex = ArrIndex + 1;
}
IndexEnd = IndexEnd + 1;
}
}
//==============================================//
//遍历整棵树,进行节点的Checked的初始化设置//
//==============================================//
function SetTree(node)
{
var childNodes = new Array();
childNodes = node.getChildren();
var i = 0;
var j = 0;
for( i=0 ; i<strArray.length; i++ )
{
if( strArray[i] == node.getAttribute("ID") )
{
saveCheckState(node);
node.setAttribute("checked","true");
//saveCheckState(node.getNodeIndex());
}
}
if( parseInt(childNodes.length) != 0 )
{
for( j=0;j< parseInt(childNodes.length); j++)
{
for( i=0 ; i< parseInt(strArray.length); i++ )
{
if( strArray[i] == childNodes[j].getAttribute("ID") )
{
saveCheckState(childNodes[j]);
childNodes[j].setAttribute("checked","true");
//saveCheckState(childNodes[j].getNodeIndex());
}
}
SetTree(childNodes[j]);
}
}
else
{
for( i=0 ; i<strArray.length; i++ )
{
if( strArray[i] == node.getAttribute("ID") )
{
saveCheckState(node);
node.setAttribute("checked","true");
//saveCheckState(node.getNodeIndex());
}
}
}
}
//====================================================//
//保存节点状态(保证在回传时节点状态依然存在)
//====================================================//
function saveCheckState(el)
{
if(el.getNodeIndex())
{
document.getElementById("TreeView1").queueEvent("oncheck",el.getNodeIndex().toString());
}
}
//====================================================//
//点击保存按钮时对所选中的节点进行整理
//====================================================//
function FindChecked()
{
strList = "";
var ChildNodes = new Array();
ChildNodes = document.getElementById("TreeView1").getChildren();
for( var i=0; i<ChildNodes.length; i++ )
{
CheckedAll(ChildNodes[i]);
}
//alert(strList);
doSelect(strList);
}
function CheckedAll(node)
{
var i = 0;
var strID;
var childNodes = new Array();
childNodes = node.getChildren();
if( parseInt(childNodes.length) != 0 )
{
for( i=0; i<parseInt(childNodes.length); i++ )
{
CheckedAll(childNodes[i]);
}
}
else
{
if( node.getAttribute("checked") == true )
{
strID = node.getAttribute("id");
strList = strList + strID + ",";
}
}
}
转载于:https://www.cnblogs.com/wskaihd/archive/2006/10/25/539011.html
(转)对微软那棵TreeView进行试用,主要是对CheckBox进行操作相关推荐
- 【原】TreeView+Checkbox级联操作(IE/FireFox测试通过)
TreeView+Checkbox级联操作 步骤1.前台页面拖放一个Treeview,将其ShowCheckBoxes属性设置为All <asp:TreeView ID="tvCoun ...
- c# 利用 两个TREEVIEW控件完成TEENODE的鼠标拖动操作
c# 利用 两个TREEVIEW控件完成TEENODE的鼠标拖动操作 功能说明: 我们有两个TREEVIEW控件--TREEVIEW1,TREEVIEW2.Treeview1内有三个NODE,Tree ...
- 我眼中的微软Azure:Microsoft Azure试用 注意
使用过程中就一点需要注意,世纪互联提供的试用是中国版azure.这里的帐号和微软官网azure的帐号是不通的. 比如我在使用visual studio 2017发布程序到azure是无法使用试用版账号 ...
- 微软杀毒软件Microsoft Security Essentials试用
前不久下了微软的免费杀毒软件Microsoft Security Essentials,但是一直太忙没有时间拿来测测.Microsoft Security Essentials的查杀引擎是mpengi ...
- 微软系统修复工具(试用版)
Microsoft Fix it Center 使获得支持从未有过如此简单,因为自动疑难解 答程序将解决您的现有问题并防患于未然. 为您的设备定制了解决方案,仅显示与您的硬件 和软件相关的信息. Mi ...
- 最简单的Asp.Net 2.0 TreeView的Checkbox级联操作
直接在TreeView的属性上加入:OnClick="OnTreeNodeChecked()" 或者:MyTree.Attributes.Add("OnClick&quo ...
- .Net 的 Web 项目中 关于TreeView 的 checkBox 的操作……
XX.aspx页面中: <asp:TreeView ID="TreeView1" runat="server" ShowCheckBoxes=" ...
- 微软免费AI作文打分软件升级:雅思考研四六级都能用,还能查单词给替换
赖可 发自 亚湾区 量子位 报道 | 公众号 QbitAI 练习英语写作一大困难就是:没有人帮我改. 现在可以找AI打分了. 亚洲研究院研发升级了以前的作文打分功能,命名为"微软爱写作&qu ...
- activex控件 新对象 ocx 初始化_Office已经支持64位的树控件Treeview了
之前在使用Office365时发现微软其实已经悄悄地开始提供了64位的Treeview树控件,只是并没有公开宣布.当时是在一个网友的电脑上说他可以在64位Excel中可直接使用64位树控件,当时以为他 ...
最新文章
- 119.CSMA/CD
- 清空mysql注册表步骤_完全卸载MySQL 数据库清空MySql注册表
- WatchOS系统开发大全(1)-AppleWatch背景介绍
- Android Studio Linking an external C++ project 时候 报Invalid file name. Expected: CMakeLists.txt
- 前台如何解析json格式 以及后台如何生成json格式
- HBase 1.x Coprocessor使用指南
- 震惊!丧心病狂的夕小瑶推出新一轮写作计划!
- Storm 的可靠性保证测试
- 【微信插件】P3微信插件测试使用步骤
- nacos 本地测试_本地调试和服务器调试都无法连通-问答-阿里云开发者社区-阿里云...
- MPLS ××× Carrier Supporting Carrier Option AB(二)
- mysql间隙锁触发条件,详解系列文章
- useState使用和原理
- python中的连续比较是什么_Python算法的分治算法,python,之,连续,子,列表,最大,和...
- 计算机控制软件流程图,计算机控制系统的组成
- word自动生成目录和调整页码字体的方法
- 昆仑通泰触摸屏与PLC通讯故障处理
- 2019年2月已到,Java 8要收费了吗?
- 【STM32H750】玩转ART-Pi(二)——制作MDK的外部QSPI-FLASH烧录算法
- Win11后续更新计划:微软将逐步取消传统的控制面板功能
热门文章
- socket.io的基本使用
- Azure 执行模型
- linux 命令访问url: curl http://www.baidu.com/index.html
- 亚马逊AWS:正确设置FTP
- 奋斗---论门当户对
- 2016BAT+华为+滴滴+搜狗Android开发岗面试问题整理
- 自定义view-波纹扩散(圆扩散)
- Android10.0应用进程创建过程以及Zygote的fork流程-[Android取经之路]
- AndroidStudio2.2 Preview3中NDK开发之CMake和传统 JNI在目录结构和配置文件上的区别
- JVM判断对象是否已死?