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
);
}
/**/
/*
联动复选框 结束
*/
查看全文
相关阅读:
在MyEclipse中运行tomcat报错 严重: Error starting static Resources
MyEclipse 2015 运行tomcat 内存溢出的解决方法
(转)Tomcat内存设置详解
Object调用控件的办法
Hibernate主键生成方式之hilo
(转)“中国第一程序员” 求伯君的传奇经历
雷军相识求伯君
(转)雷军重掌金山幕后:与求伯君暗战三年两次逼宫
华军软件发展及盈利模式
中年人编程
原文地址:https://www.cnblogs.com/toumh/p/1077358.html
最新文章
3299 Humidex
POJ 1006 Biorhythms
STAMPS
Edge Detection
Maya Calendar
html上传文件
ffplay播放YUV数据
删除当前目录及子目录下特定后缀文件
JNI写本地日志文件
linux交叉编译Windows版本的ffmpeg
热门文章
windows下mingw编译faac
ffmpeg摄像头推流
YV12和NV12格式
jpg图片转换为yuv
m3u8直播测试地址
request.getparam()与request.getAttibute()的区别
直接用request.setAttribute()会报错,在这之前应该先让request获取ServletActionContext.getRequest();方法 // request.getAttribute同理
n++与++n的区别
webwork <ww:if> 标签的使用
Error configuring application listener of class 报错 解决
Copyright © 2011-2022 走看看