时间: 2021-07-31 作者:daque
<html><head><meta http-equiv="content-language" content="zh-cn"><meta http-equiv="content-type" content="text/html; charset=utf8"><meta name="generator" content="microsoft frontpage 4.0"><meta name="progid" content="frontpage.editor.document"><title>checkbox</title><script language=javascript defer>var n=document.getelementsbytagname("input");var checkboxnum=n.length;var tf,searchnodename,searchparentnodename,samenodenum,subnodecheckednum,samenodecheckednum,subnodenum,subnodecheckedtf;function findparentnode(subnodename) //获得上司结点卯,并确定能否被选中{ tf=false; //初始化选中状况 searchnodename=subnodename; t=subnodename.lastindexof("_"); //确定能否生存上司结点 if(t!=-1)searchnodename=subnodename.substring(0,t);//即使生存上司结点,博得上司结点卯 if(document.all(subnodename).checked)tf=true;//确定结点能否被选中 return searchnodename;}function checksubnode(nodename) //获得结点卯,并确定子结点能否选中{ subnodecheckedtf=false; //初始化子结点选中状况 subnodenum=0; //初始化子结点数量 samenodenum=0; //初始化同级结点数量 subnodecheckednum=0; //初始化子结点被选中的数量 samenodecheckednum=0; //初始化同级结点被选中的数量 parentnodename=findparentnode(nodename);//上司结点卯 searchparentnodename=nodename;//暂时结点卯 d=nodename.lastindexof("_"); //确定能否生存上司结点 if(d!=-1)searchparentnodename=searchparentnodename.substring(0,d);//即使生存上司结点,博得上司结点卯 for(i=0;i<checkboxnum;i++) { if(n[i].name.length==nodename.length&&parentnodename==findparentnode(n[i].name)) { samenodenum+=1; //同级结点数量加一 if(n[i].checked)samenodecheckednum+=1;//同级结点被选中的数量加一 } if(n[i].name.substring(0,nodename.length)==nodename&&n[i].name!=nodename&&n[i].type=="checkbox") { subnodenum+=1; //子结点数数量加一 if(n[i].checked)subnodecheckednum+=1;//子结点被选中的数量加一 } } if((samenodenum==1samenodecheckednum==0)&&(subnodecheckednum==0)&&!document.all(nodename).checked) { subnodecheckedtf=true; //确定子结点能否被选中 } return searchparentnodename;}function checkall(boxname){ searchnodename=boxname; searchparentnodename=boxname subnodelength=boxname.split("_").length; for(i=0;i<checkboxnum;i++) { if(n[i].name.substring(0,boxname.length)==boxname&&n[i].name!=boxname&&n[i].type=="checkbox") n[i].checked=document.all(boxname).checked?true:false; //选中一切子结点 } for(j=1;j<subnodelength;j++) { document.all(findparentnode(searchnodename)).checked=tf?true:false; document.all(checksubnode(searchparentnodename)).checked=subnodecheckedtf?false:true; } }document.onclick=function(){if(event.srcelement.type=="checkbox")checkall(event.srcelement.name);}</script></head><body ><form name="f1" ><input type="checkbox" name="bid"><br><input type="checkbox" name="bid_01"><br><input type="checkbox" name="bid_01_01"><br><input type="checkbox" name="bid_01_02"><br><input type="checkbox" name="bid_01_02_01"><br><input type="checkbox" name="bid_01_02_02"><br><input type="checkbox" name="bid_01_02_02_01"><br><input type="checkbox" name="bid_01_02_02_02"><br><input type="checkbox" name="bid_01_02_02_03"><br><input type="checkbox" name="bid_01_02_02_03_01"><br><input type="checkbox" name="bid_01_02_02_03_02"><br><input type="checkbox" name="bid_01_02_02_03_03"><br><input type="checkbox" name="bid_01_02_02_04"><br><input type="checkbox" name="bid_01_02_03"><br><input type="checkbox" name="bid_01_03"><br><input type="checkbox" name="bid_01_04"><br><input type="checkbox" name="bid_02"><br><input type="checkbox" name="bid_03"><br><input type="checkbox" name="bid_04"><br><hr><input type="checkbox" name="ent" checkmain ><br><input type="checkbox" name="ent_01"><br><input type="checkbox" name="ent_01_01"><br><input type="checkbox" name="ent_02"><br><input type="checkbox" name="ent_03"><br><input type="checkbox" name="ent_04"><br></form>