还是树的问题,怎么就没人回复呢?别只说作过,共享一下,帮帮忙了! 我只能说我的想法,在每一次改事件中,检查所有元素,然后写checkbox的状态。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 哇塞,一点都不容易写!传统的树代码我就不在这里罗嗦了,主要演示一下递归判断父节点和子节点的状态:<HTML><HEAD><TITLE> emu's test of simple tree</TITLE><SCRIPT LANGUAGE="JavaScript"><!--function checkSelect(){ var elm = event.srcElement; checkChildrenRecurve(elm); checkRootRecurve(document.getElementById("root"));}function checkChildrenRecurve(elm){ var li = elm.parentNode; var ul = li.lastChild; if (ul.tagName != "UL") return; var lis = ul.children; for (var i=0;i<lis.length;i++){ lis[i].firstChild.checked=elm.checked; checkChildrenRecurve(lis[i].firstChild) }}function checkRootRecurve(ul){ if (ul.tagName != "UL") { ul.parentNode.firstChild.allChecked = ul.parentNode.firstChild.checked; ul.parentNode.firstChild.allUnChecked = !ul.parentNode.firstChild.checked; return; } var lis = ul.children; var allChecked = true; var allUnChecked = true; for (var i=0;i<lis.length;i++){ checkRootRecurve(lis[i].lastChild) allChecked = allChecked && lis[i].firstChild.checked && lis[i].firstChild.allChecked; allUnChecked = allUnChecked && !lis[i].firstChild.checked && lis[i].firstChild.allUnChecked; } ul.parentNode.firstChild.allChecked=allChecked; ul.parentNode.firstChild.allUnChecked=allUnChecked; if (allChecked || allUnChecked){ ul.parentNode.firstChild.checked=allChecked; ul.parentNode.firstChild.style.backgroundColor="white"; }else{ ul.parentNode.firstChild.style.backgroundColor="gray"; ul.parentNode.firstChild.checked=true; }}//--></SCRIPT></HEAD><BODY><div><input type=checkbox onclick="checkSelect()"><UL id=root> <LI><input type=checkbox onclick="checkSelect()"> <UL> <LI><input type=checkbox onclick="checkSelect()"> <UL> <LI><input type=checkbox onclick="checkSelect()"> <LI><input type=checkbox onclick="checkSelect()"> </UL> <LI><input type=checkbox onclick="checkSelect()"> <UL> <LI><input type=checkbox onclick="checkSelect()"> <LI><input type=checkbox onclick="checkSelect()"> </UL> </UL> <LI><input type=checkbox onclick="checkSelect()"> <UL> <LI><input type=checkbox onclick="checkSelect()"> <UL> <LI><input type=checkbox onclick="checkSelect()"> <LI><input type=checkbox onclick="checkSelect()"> </UL> <LI><input type=checkbox onclick="checkSelect()"> <UL> <LI><input type=checkbox onclick="checkSelect()"> <LI><input type=checkbox onclick="checkSelect()"> </UL> </UL></UL></div></BODY></HTML> 稍做了点改动,把onclick从html中间挪出来了:<HTML><HEAD><TITLE> emu's test of simple tree</TITLE><SCRIPT LANGUAGE="JavaScript"><!--function checkSelect(){ var elm = event.srcElement; checkChildrenRecurve(elm); checkRootRecurve(document.getElementById("root"));}function checkChildrenRecurve(elm){ var li = elm.parentNode; var ul = li.lastChild; if (ul.tagName != "UL") return; var lis = ul.children; for (var i=0;i<lis.length;i++){ lis[i].firstChild.checked=elm.checked; checkChildrenRecurve(lis[i].firstChild) }}function checkRootRecurve(ul){ if (ul.tagName != "UL") { ul.parentNode.firstChild.allChecked = ul.parentNode.firstChild.checked; ul.parentNode.firstChild.allUnChecked = !ul.parentNode.firstChild.checked; return; } var lis = ul.children; var allChecked = true; var allUnChecked = true; for (var i=0;i<lis.length;i++){ checkRootRecurve(lis[i].lastChild) allChecked = allChecked && lis[i].firstChild.checked && lis[i].firstChild.allChecked; allUnChecked = allUnChecked && !lis[i].firstChild.checked && lis[i].firstChild.allUnChecked; } ul.parentNode.firstChild.allChecked=allChecked; ul.parentNode.firstChild.allUnChecked=allUnChecked; if (allChecked || allUnChecked){ ul.parentNode.firstChild.checked=allChecked; ul.parentNode.firstChild.style.backgroundColor="white"; }else{ ul.parentNode.firstChild.style.backgroundColor="gray"; ul.parentNode.firstChild.checked=true; }}function init(){ var elms = document.getElementsByTagName("INPUT"); for (var i=0;i<elms.length;i++) elms[i].onclick=checkSelect;}//--></SCRIPT></HEAD><BODY onload="init()"><div><input type=checkbox><UL id=root> <LI><input type=checkbox> <UL> <LI><input type=checkbox> <UL> <LI><input type=checkbox> <LI><input type=checkbox> </UL> <LI><input type=checkbox> <UL> <LI><input type=checkbox> <LI><input type=checkbox> </UL> </UL> <LI><input type=checkbox> <UL> <LI><input type=checkbox> <UL> <LI><input type=checkbox> <LI><input type=checkbox> </UL> <LI><input type=checkbox> <UL> <LI><input type=checkbox> <LI><input type=checkbox> </UL> </UL></UL></div></BODY></HTML>呼、呼,我要去歇会了…… 简单的 javascript 正则表达式匹配 新手,求教鼠标事件 为何 break 标号 ,不会死循环呢?有代码 年月日控件 求javascript连接图片地址代码 一个动态页面对其元计算的问题.(我把代码贴出来了) 两个下拉框 关于获得对象顶边距问题 怎么由名称找到控件 刚开始学js,求大神指点一下,这段代码错在哪里?想实现的效果是载入页面后调用这个方法可以实现:只显示一级菜单,隐藏二级菜单。谢谢了 showModelessDialog的窗口如何最小化,只要不在屏幕上就行 一个困饶了我一天的小问题,现在把我的调试心得给大家,希望大家以后不要走弯路
传统的树代码我就不在这里罗嗦了,主要演示一下递归判断父节点和子节点的状态:
<HTML>
<HEAD>
<TITLE> emu's test of simple tree</TITLE>
<SCRIPT LANGUAGE="JavaScript">
<!--
function checkSelect(){
var elm = event.srcElement;
checkChildrenRecurve(elm);
checkRootRecurve(document.getElementById("root"));
}
function checkChildrenRecurve(elm){
var li = elm.parentNode;
var ul = li.lastChild;
if (ul.tagName != "UL") return;
var lis = ul.children;
for (var i=0;i<lis.length;i++){
lis[i].firstChild.checked=elm.checked;
checkChildrenRecurve(lis[i].firstChild)
}
}
function checkRootRecurve(ul){
if (ul.tagName != "UL") {
ul.parentNode.firstChild.allChecked = ul.parentNode.firstChild.checked;
ul.parentNode.firstChild.allUnChecked = !ul.parentNode.firstChild.checked;
return;
}
var lis = ul.children;
var allChecked = true;
var allUnChecked = true;
for (var i=0;i<lis.length;i++){
checkRootRecurve(lis[i].lastChild)
allChecked = allChecked && lis[i].firstChild.checked && lis[i].firstChild.allChecked;
allUnChecked = allUnChecked && !lis[i].firstChild.checked && lis[i].firstChild.allUnChecked;
}
ul.parentNode.firstChild.allChecked=allChecked;
ul.parentNode.firstChild.allUnChecked=allUnChecked;
if (allChecked || allUnChecked){
ul.parentNode.firstChild.checked=allChecked;
ul.parentNode.firstChild.style.backgroundColor="white";
}else{
ul.parentNode.firstChild.style.backgroundColor="gray";
ul.parentNode.firstChild.checked=true; }
}//-->
</SCRIPT>
</HEAD><BODY>
<div>
<input type=checkbox onclick="checkSelect()">
<UL id=root>
<LI><input type=checkbox onclick="checkSelect()">
<UL>
<LI><input type=checkbox onclick="checkSelect()">
<UL>
<LI><input type=checkbox onclick="checkSelect()">
<LI><input type=checkbox onclick="checkSelect()">
</UL>
<LI><input type=checkbox onclick="checkSelect()">
<UL>
<LI><input type=checkbox onclick="checkSelect()">
<LI><input type=checkbox onclick="checkSelect()">
</UL>
</UL>
<LI><input type=checkbox onclick="checkSelect()">
<UL>
<LI><input type=checkbox onclick="checkSelect()">
<UL>
<LI><input type=checkbox onclick="checkSelect()">
<LI><input type=checkbox onclick="checkSelect()">
</UL>
<LI><input type=checkbox onclick="checkSelect()">
<UL>
<LI><input type=checkbox onclick="checkSelect()">
<LI><input type=checkbox onclick="checkSelect()">
</UL>
</UL>
</UL>
</div>
</BODY>
</HTML>
<HEAD>
<TITLE> emu's test of simple tree</TITLE>
<SCRIPT LANGUAGE="JavaScript">
<!--
function checkSelect(){
var elm = event.srcElement;
checkChildrenRecurve(elm);
checkRootRecurve(document.getElementById("root"));
}
function checkChildrenRecurve(elm){
var li = elm.parentNode;
var ul = li.lastChild;
if (ul.tagName != "UL") return;
var lis = ul.children;
for (var i=0;i<lis.length;i++){
lis[i].firstChild.checked=elm.checked;
checkChildrenRecurve(lis[i].firstChild)
}
}
function checkRootRecurve(ul){
if (ul.tagName != "UL") {
ul.parentNode.firstChild.allChecked = ul.parentNode.firstChild.checked;
ul.parentNode.firstChild.allUnChecked = !ul.parentNode.firstChild.checked;
return;
}
var lis = ul.children;
var allChecked = true;
var allUnChecked = true;
for (var i=0;i<lis.length;i++){
checkRootRecurve(lis[i].lastChild)
allChecked = allChecked && lis[i].firstChild.checked && lis[i].firstChild.allChecked;
allUnChecked = allUnChecked && !lis[i].firstChild.checked && lis[i].firstChild.allUnChecked;
}
ul.parentNode.firstChild.allChecked=allChecked;
ul.parentNode.firstChild.allUnChecked=allUnChecked;
if (allChecked || allUnChecked){
ul.parentNode.firstChild.checked=allChecked;
ul.parentNode.firstChild.style.backgroundColor="white";
}else{
ul.parentNode.firstChild.style.backgroundColor="gray";
ul.parentNode.firstChild.checked=true; }
}function init(){
var elms = document.getElementsByTagName("INPUT");
for (var i=0;i<elms.length;i++)
elms[i].onclick=checkSelect;
}
//-->
</SCRIPT>
</HEAD><BODY onload="init()">
<div>
<input type=checkbox>
<UL id=root>
<LI><input type=checkbox>
<UL>
<LI><input type=checkbox>
<UL>
<LI><input type=checkbox>
<LI><input type=checkbox>
</UL>
<LI><input type=checkbox>
<UL>
<LI><input type=checkbox>
<LI><input type=checkbox>
</UL>
</UL>
<LI><input type=checkbox>
<UL>
<LI><input type=checkbox>
<UL>
<LI><input type=checkbox>
<LI><input type=checkbox>
</UL>
<LI><input type=checkbox>
<UL>
<LI><input type=checkbox>
<LI><input type=checkbox>
</UL>
</UL>
</UL>
</div>
</BODY>
</HTML>
呼、呼,我要去歇会了……