TreeView中父子节点的checkbox的同时选中问题,js控制.
html:
<asp:TreeView ID="tvLimit" runat="server" ShowCheckBoxes="All" onclick="javascript:GoClick();"
ShowLines="True" ExpandDepth="0"></asp:TreeView>
js:
<script >
function GoClick()
{
var obj = event.srcElement;
if(obj.tagName.toUpperCase() != "INPUT") return;
var tb = obj.parentElement.parentElement.parentElement.parentElement;//当前节点的Table
SelAllChildren(tb,obj.checked);
tb= tb.parentElement;//
while(true)
{
tb = tb.previousSibling
if( tb == null) return;
SetParentCheckBoxStatus(tb);
tb= tb.parentElement
if( tb == null) return;
}
}
function SelAllChildren(tb,bChecked)
{
var div = tb.nextSibling;
try
{
for(var i=0;i<div.children.length;i++)
{
if(div.children[i].tagName.toUpperCase()!="TABLE")continue;
var chkBox= FindRowCheckBox(div.children[i].rows[0]);
if(chkBox == null) continue;
chkBox.checked = bChecked;
SelAllChildren(div.children[i],bChecked);
}
}catch(e){}
}
function SetParentCheckBoxStatus(objTb)
{
var div = objTb.nextSibling;
var bSelAll = true;
var bSelOne = false;
for(var i=0;i<div.children.length;i++)
{
if(div.children[i].tagName.toUpperCase()!="TABLE")continue;
var chkBox= FindRowCheckBox(div.children[i].rows[0]);
if(!chkBox.checked)
{
bSelAll =false;
}else
{
bSelOne = true;
}
}
if(objTb.rows!= null)
{
var chkBox = FindRowCheckBox(objTb.rows[0])
chkBox.checked = bSelOne;
}
}
function FindRowCheckBox(tr)
{
for(var i=0;i<tr.cells.length;i++)
{
if(tr.cells[i].firstChild.tagName == "INPUT")
{
return tr.cells[i].firstChild;
}
}
}
</script>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构