zoukankan
html css js c++ java
用JS实现VS2005 TreeView的checkBox的父子节点级联取自YYControls
项目中需要实现树的父子节点级联功能,所以想到了YYControls控件,但是又不好直接使用这个控件,所以就把里面的代码直接提取出来了,在此也感谢YYControls的作者!
注:只
适
用于VS2005的TreeView控件
<
SCRIPT LANGUAGE
=
"
JavaScript
"
>
<!--
//
调用方法:
//
在页面文件中使用下面语句将树名添加到yy_stv_ccTreeView_pre数组中:
//
参数中的'menuTreename'即为树名称
yy_stv_ccTreeView_pre.push(
"
menuTreename
"
);
//
-->
<
/
SCRIPT>
核心JS代码
//
将以下代码另存为JS文件,直接加载在目标文件中即可
/**/
/*
Helper 开始
*/
String.prototype.yy_stv_startsWith
=
function
(s)
{
//
/ <summary>StartsWith()</summary>
var
reg
=
new
RegExp(
"
^
"
+
s);
return
reg.test(
this
);
}
function
yy_stv_addEvent(obj, evtType, fn)
{
//
/ <summary>绑定事件</summary>
//
FF
if
(obj.addEventListener)
{
obj.addEventListener(evtType, fn,
true
);
return
true
;
}
//
IE
else
if
(obj.attachEvent)
{
var
r
=
obj.attachEvent(
"
on
"
+
evtType, fn);
return
r;
}
else
{
return
false
;
}
}
/**/
/*
Helper 结束
*/
/**/
/*
联动复选框 开始
*/
var
yy_stv_ccTreeView_pre
=
new
Array();
//
cs中动态向其灌数据(TreeView内控件ID的前缀数组)
function
yy_stv_ccClickCheckbox(e)
{
//
/ <summary>单击复选框时</summary>
var
evt
=
e
||
window.event;
//
FF || IE
var
obj
=
evt.target
||
evt.srcElement
//
FF || IE
yy_stv_foreachChildCheckbox(obj);
yy_stv_foreachParentCheckbox(obj);
}
function
yy_stv_checkParentCheckbox(table, checked)
{
//
/ <summary>设置父复选框的状态</summary>
var
nodes
=
table.parentNode.parentNode.childNodes;
for
(
var
i
=
1
; i
<
nodes.length; i
++
)
{
if
(nodes[i]
==
table.parentNode)
{
if
(
typeof
(nodes[i
-
1
])
==
'
undefined
'
||
typeof
(nodes[i
-
1
].rows)
==
'
undefined
'
)
return
;
for
(
var
x
=
0
; x
<
nodes[i
-
1
].rows.length; x
++
)
{
for
(
var
j
=
0
; j
<
nodes[i
-
1
].rows[x].cells.length; j
++
)
{
//
debugger;
var
chk
=
nodes[i
-
1
].rows[x].cells[j].childNodes[
0
];
if
(
typeof
(chk)
!=
'
undefined
'
&&
chk.tagName
==
"
INPUT
"
&&
chk.type
==
"
checkbox
"
)
{
chk.checked
=
checked;
yy_stv_foreachParentCheckbox(nodes[i
-
1
]);
return
;
}
}
}
}
}
}
function
yy_stv_foreachChildCheckbox(obj)
{
//
/ <summary>单击父复选框时,设置其子复选框的选中状态</summary>
var
checked;
if
(obj.tagName
==
"
INPUT
"
&&
obj.type
==
"
checkbox
"
)
{
checked
=
obj.checked;
do
{
obj
=
obj.parentNode;
}
while
(obj.tagName
!=
"
TABLE
"
)
}
var
nodes
=
obj.parentNode.childNodes;
for
(
var
i
=
0
; i
<
nodes.length
-
1
; i
++
)
{
if
(nodes[i]
==
obj
&&
nodes[i
+
1
].tagName
==
"
DIV
"
)
{
var
elements
=
nodes[i
+
1
].getElementsByTagName(
"
INPUT
"
);
for
(j
=
0
; j
<
elements.length; j
++
)
{
if
(elements[j].type
==
'
checkbox
'
)
{
elements[j].checked
=
checked;
}
}
}
}
}
function
yy_stv_foreachParentCheckbox(obj)
{
//
/ <summary>单击某一复选框时,设置其父复选框的选中状态</summary>
var
checkedNum
=
0
;
var
uncheckedNum
=
0
;
if
(obj.tagName
==
"
INPUT
"
&&
obj.type
==
"
checkbox
"
)
{
do
{
obj
=
obj.parentNode;
}
while
(obj.tagName
!=
"
TABLE
"
)
}
var
tables
=
obj.parentNode.getElementsByTagName(
"
TABLE
"
);
if
(
typeof
(tables)
==
'
undefined
'
)
return
;
for
(
var
i
=
0
; i
<
tables.length; i
++
)
{
for
(
var
x
=
0
; x
<
tables[i].rows.length; x
++
)
{
for
(
var
j
=
0
; j
<
tables[i].rows[x].cells.length; j
++
)
{
var
chk
=
tables[i].rows[x].cells[j].childNodes[
0
];
if
(
typeof
(chk)
!=
'
undefined
'
&&
chk.tagName
==
"
INPUT
"
&&
chk.type
==
"
checkbox
"
)
{
if
(chk.checked)
checkedNum
++
;
else
uncheckedNum
++
;
}
}
}
}
if
(uncheckedNum
==
0
)
{
yy_stv_checkParentCheckbox(obj,
true
);
}
else
{
yy_stv_checkParentCheckbox(obj,
false
);
}
}
function
yy_stv_attachCheckboxClickListener()
{
//
/ <summary>监听所有联动复选框的单击事件</summary>
var
elements
=
document.getElementsByTagName(
"
INPUT
"
);
for
(i
=
0
; i
<
elements.length; i
++
)
{
if
(elements[i].type
==
'
checkbox
'
)
{
for
(j
=
0
; j
<
yy_stv_ccTreeView_pre.length; j
++
)
{
if
(elements[i].id.yy_stv_startsWith(yy_stv_ccTreeView_pre[j]))
{
yy_stv_addEvent(elements[i],
'
click
'
, yy_stv_ccClickCheckbox);
break
;
}
}
}
}
}
if
(document.all)
{
window.attachEvent(
'
onload
'
, yy_stv_attachCheckboxClickListener);
}
else
{
window.addEventListener(
'
load
'
, yy_stv_attachCheckboxClickListener,
false
);
}
/**/
/*
联动复选框 结束
*/
查看全文
相关阅读:
java接入钉钉机器人(带源码)
使用java做一个能赚钱的微信群聊机器人(2020年基于PC端协议最新可用版)
侠说java8--Stream流操作学习笔记,都在这里了
Elasticsearch调优篇-慢查询分析笔记
网络探测和抓包工具 wireshark
window10远程ubuntu18.04
springdataJPA mysql myisam innodb
命令集
java tmpdir 启动 kafka 命令行
java jar 启动命令
原文地址:https://www.cnblogs.com/toumh/p/1077358.html
最新文章
编程中常遇到的细节问题
动态规划总结
linux下gdb调试方法与技巧整理
未分类——数组
繁忙的都市
最小生成树的两种方法(Kruskal算法和Prim算法)
图的基本操作(插入、删除、查找、遍历)
图的存储结构实现
图论
链栈
热门文章
火车进站 (卡特兰数问题)
背包九讲
插入排序
希尔排序(shell_sort)
程序猿没有副业,太难了
搞java开发,看懂JVM的GC日志真的很重要
Nginx双机主备(Keepalived实现)
Mysql百万数据量级数据快速导入Redis
多线程之CountDownLatch的用法及原理笔记
pinpoint实现告警推送至钉钉和微信群
Copyright © 2011-2022 走看看