`
xuhu_java
  • 浏览: 12955 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

checkbox 三态【转】

 
阅读更多
<html>
<head>
<meta http-equiv="Content-Language" content="zh-cn">
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<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 SubNodeCheckSome,SameNodeCheckSome,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; //初始化同级结点被选中的数目
  SubNodeCheckSome=0; //初始化子结点半选数目
  SameNodeCheckSome=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].indeterminate)SameNodeCheckSome+=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(n[i].indeterminate)SubNodeCheckSome+=1; //子结点半选数目加一
    }
  }

  if((SameNodeNum==1||SameNodeCheckedNum==0)&&(SubNodeCheckedNum==0)&&!document.all(NodeName).checked)
    SubNodeCheckedTF=true; //判断子结点是否被选中
  if((SameNodeNum>=0&&SameNodeCheckedNum<SameNodeNum)||SameNodeCheckSome>0||SubNodeCheckSome>0)
    document.all(SearchParentNodeName).indeterminate=true;//将上级选中状态改为半选
  if((SameNodeCheckedNum==SameNodeNum||SameNodeCheckedNum==0)&&SubNodeCheckSome==0&&SameNodeCheckSome==0)
    document.all(SearchParentNodeName).indeterminate=false;//取消上级半选状态
  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].indeterminate=false; //取消半选状态
      n[i].checked=document.all(BoxName).checked?true:false;//选中所有子结点
    }
  }
  for(j=1;j<SubNodeLength;j++)
  {
    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>
分享到:
评论

相关推荐

    PB 11.5 CheckBox三种状态的实例

    除了常见的二态CheckBox外,PowerBuilder还支持三态CheckBox,其第三个状态是“不确定”或“部分选中”。这在某些情况下很有用,比如表示数据的完整性或一致性问题。 7. 集成到应用程序: 在PB 11.5项目中,你...

    TreeView实现三态

    "TreeView实现三态"是指在TreeView控件中,节点不仅可以是常规的选中或未选中状态,还可以有第三种状态——部分选中(或者称为半选中)。这种三态模式在某些需求下特别有用,比如多选时允许用户选择一个组内的部分项...

    易语言源码易语言三态选择框源码.rar

    在易语言中,三态选择框(TriState Checkbox)是一种用户界面控件,用于提供三种状态的选择,通常包括未选中、选中和不确定(灰色)三种状态。在编程中,三态选择框常用于表示用户对某个问题的不确定态度或第三种...

    jQuery三态树

    **jQuery三态树详解** jQuery三态树是一种利用jQuery库构建的数据展示组件,它以Json格式的数据作为输入,呈现为可交互的树形结构。这种树状结构具有三种状态:未选中、部分选中和全选,为用户提供了一种方便的方式...

    vb.net 三态树形

    2. **设置CheckBox样式**:为了显示三态复选框,我们需要覆盖`DrawNode`事件。在这个事件处理程序中,我们可以根据`TriStateState`属性来决定绘制复选框的状态。 ```vbnet Private Sub TreeView_DrawNode(sender As...

    四款漂亮的控件风格(Silverlight)源码

     这里具体介绍下ToggleButton,它是三态按钮(就是有Indeterminate,Checked,Unchecked三种点击状态) 利用这个控件就可以很方便的实现以前需要写不少JavaScript代码实现的状态翻转的功能 Slider控件:Slider...

    四款漂亮的控件风格(Silverlight)源码.rar

     这里具体介绍下ToggleButton,它是三态按钮(就是有Indeterminate,Checked,Unchecked三种点击状态)  利用这个控件就可以很方便的实现以前需要写不少JavaScript代码实现的状态翻转的功能 Slider控件:Slider...

    南开大学复习资料-Windows可视化编程10001.docx

    * 在Windows Forms程序中,某CheckBox对象初始化为三态(即:其ThreeState属性值为true),则应使用Checked属性来检查此CheckBox的状态。 * 要创建多文档应用程序,需要将窗体的IsMdiContainer属性设为true。 * MSIL...

    南开大学复习资料-Windows可视化编程1.docx

    - CheckBox:具有三种状态(选中、未选中、三态)的复选框控件,其ThreeState属性控制是否启用三态模式,Checked属性用于检查其状态。 - IsMdiContainer:设置窗体为MDI容器,可以包含多个子窗口。 4. Microsoft ...

    vb.net基本入门学习资料.doc

    (三) vb.net中的类、继承与多态性 1.vb.net中给一个类添加方法 2.命名属性、方法和事件 3.vb.net的事件和事件处理 4.类的继承(Inheritance) 5.vb.net继承的规则 6.用继承建立一个继承类 7.重载Windows控件 8....

    vb.net基本入门学习资料

    (三) vb.net中的类、继承与多态性 1.vb.net中给一个类添加方法 2.命名属性、方法和事件 3.vb.net的事件和事件处理 4.类的继承(Inheritance) 5.vb.net继承的规则 6.用继承建立一个继承类 7.重载Windows控件 8....

    学习方法讨论

    - **面向对象编程**:类与对象的概念、继承、多态性等。 - **类型转换与命名规则**:理解C#中的类型转换机制,掌握命名规范。 #### 二、开发环境搭建:Visual Studio的使用 **标题描述**:“Ҫϲ鿴1Щϣ VS̳̣VS...

    jQuery的Tree控件 jstree

    - `checkbox`:控制复选框的行为,如三态复选、全选/全不选等。 4. **数据源** - **JSON**:最常用的格式,可以包含子节点数据和额外信息。 - **HTML**:直接使用HTML结构来创建树,适用于静态内容。 - **Ajax*...

    JQuerry 插件介绍

    - 3 state radio buttons:创建三态单选按钮。 - ShiftCheckbox jQuery Plugin:优化多选操作。 - jQuery Checkbox (checkboxes with images):使用图像作为复选框。 - jQuery SpinButton Control:数字输入框,...

    bootstrap-switch-master

    这只是一个基本的用法示例,实际上Bootstrap Switch提供了许多可配置选项,如颜色、大小、是否允许三态等,以及事件处理,允许开发者根据需求进行深入定制。 总的来说,Bootstrap Switch是一个强大的工具,可以提升...

    jsTreeSelect jquery 树形下拉菜单

    - `checkbox`: 控制复选框的显示和行为,如三态模式、同级联动等。 - `plugins`: 添加额外的功能插件,如搜索、拖放、状态保存等。 - `themes`: 自定义主题样式,包括颜色、图标等。 ### 4. 数据源与异步加载 对于...

    Ext TreePanelrcheckbox级联选择的实现

    同时,通过设置`threeState`为`true`,我们可以启用三态复选框,即除了选中和未选中外,还有一种半选状态(部分子节点被选中)。然后,我们可以监听`checkchange`事件,这个事件会在复选框状态改变时触发。 以下是...

    jquery插件表

    - **3 state radio buttons**:实现三态单选按钮。 - **ShiftCheckbox jQuery Plugin**:使用键盘快捷键选中/取消选中复选框。 - **Watermark Input**:在输入框内显示默认提示文本。 - **jQuery Checkbox ...

Global site tag (gtag.js) - Google Analytics