0 0

checkbox父子联动问题(一下午没搞定)5

这是网上摘的一段代码,现在选择一个子checkbox父的不能被选中,我想要实现 在子checkbox中点击一个  父checkbox也被选中。
求教各位牛人

父类
<input type="checkbox" name="father" forcheckboxgroup="groupname1"/>

子类
<input type="checkbox" name="son" group="groupname1"/>
<input type="checkbox" name="son" group="groupname1"/>
<input type="checkbox" name="son" group="groupname1"/> 

实现代码
<script type="text/javascript">
//JS checkbox类型父子联动
function CheckboxGroup(){
var arrelement = document.all;
var i=0;
while(i<arrelement.length){
var forgroupattrib = arrelement[i].getAttribute('forcheckboxgroup');
if(forgroupattrib != null && forgroupattrib != ''){
arrelement[i].setAttribute('groupmember',_getGroupMember(arrelement[i]));

if(arrelement[i].tagName.toLowerCase() == 'input' && arrelement[i].type == 'checkbox'){
arrelement[i].onclick=function(){
//----------------------Checked All------------------
var groupmember = this.getAttribute('groupmember');
var i = 0;
while(i<groupmember.length){
groupmember[i].checked = this.checked;
i++;
}
//---------------------------------------------------
}
}
_setState(arrelement[i]); 
}
i++;
}
}
function _getGroupMember(o){
var groupname = o.getAttribute('forcheckboxgroup');
var items = new Array;
var inputs = document.getElementsByTagName('input');
var i=0;
while(i<inputs.length){
if(inputs[i].type == 'checkbox'){
var groupattrib = inputs[i].getAttribute('group');
if(groupattrib == groupname){
items[items.length] = inputs[i];
var master = inputs[i].getAttribute('groupmaster');
if (master == null) {
master = new Array;
master[0] = o.uniqueID;
inputs[i].setAttribute('groupmaster', master);
}
else{
master[master.length] = o.uniqueID;
}
inputs[i].onpropertychange = function(){
if (event.propertyName == 'checked') {
var arro = this.getAttribute('groupmaster');
var i = 0;
while (i < arro.length) {

_setState(document.getElementById(arro[i]));
i++;
}
}
}
}
}
i++;
}
return items;
}

function _setState(o){
var master = o;
if(master!=null){
var chkselall = true;
var chknosel = true;
var chkselone = true;
var groupmember = master.getAttribute('groupmember');
var i = 0;
while(i<groupmember.length){

if(chkselall){
chkselall = groupmember[i].checked;

}
if(chknosel){
chknosel = !groupmember[i].checked;

}
i++;
}

if(master.tagName.toLowerCase() == 'input'&&master.type=='checkbox'){

if (chkselall || (!chkselall&&!chknosel)) {

master.checked = true;
}
if (chknosel) {

master.checked = false;
}


}
else{
master.disabled = chknosel;
}
}
}
window.attachEvent('onload',CheckboxGroup);
</script>
2009年8月03日 17:05

1个答案 按时间排序 按投票排序

0 0

采纳的答案

<html>
<head>
</head>
<body>
<div id="wrap">
<input type="checkbox" name="father"  forcheckboxgroup="groupname1"/>

<input type="checkbox" name="son" group="groupname1"/>
<input type="checkbox" name="son" group="groupname1"/>
<input type="checkbox" name="son" group="groupname1"/>  
</div>
<input type="button" value="ok" />
<script>
function unionCheckbox(){
 var fathers = document.getElementsByName("father");
 if(fathers == 0)return;
 var father = fathers[0];
 var sons = document.getElementsByName("son");
 if(sons == 0)return;
 father.onchange = function(){
  var checked = father.checked;
  eachSons(function(ckb){
   ckb.checked = checked;
  })
 }

 var eachSons = function(fun){
   for(var i=0,l=sons.length; i<l; i++){
     var ason = sons[i];
     fun(ason);
   }
 }

 eachSons(function(ckb){
   ckb.onchange = function(){
    if(ckb.checked){//任何一个checkbox被选中,父checkbox也选中
      if(!father.checked)father.checked = true;
    }else{
      //如果子checkbox全部取消选择,则父checkbox也取消选择
      var qty = 0;
      eachSons(function(ckb){
        if(ckb.checked == false)qty++;
      })
      if(qty == sons.length)father.checked = false;
    }
   }
  })
}

unionCheckbox();
</script>
</body>
</html>

2009年8月04日 11:23

相关推荐

    Ext.net TreePanel的Checkbox操作及父子联动

    在EXT.NET框架中,TreePanel是一个非常重要的组件,它用于展示层次结构的数据,通常用于构建树形目录或层级关系的...记住,EXT.NET提供了一个强大的API,允许开发者对TreePanel的Checkbox操作和父子联动进行高度定制。

    Ext.net TreePanel的Checkbox操作及父子节点联动(修正)

    下面是一个简单的示例代码片段,展示了如何配置TreePanel以实现Checkbox和父子节点联动: ```csharp [XType("treepanel")] public class MyTreePanel : TreePanel { public MyTreePanel() { Title = "树形面板";...

    WPF ListView控件中CheckBox全选联动

    在实际项目中,我们经常需要实现一个功能,即在ListView中加入CheckBox,让用户能够通过一个主CheckBox来控制所有子项CheckBox的选择状态,这就是所谓的全选/反选联动。在本文中,我们将深入探讨如何在WPF的MVVM...

    jquery checkbox 二级联动

    仅供学习,有兴趣可以看看,高手勿入。代码很简单的。

    wpf实现带checkbox层级联动的树形菜单

    在本文中,我们将深入探讨如何使用WPF(Windows Presentation Foundation)来实现一个具有复选框的层级联动树形菜单。这个功能丰富的菜单不仅允许用户通过右键操作进行展开、关闭、选择和反选所有节点,而且在选择...

    checkbox二级联动-亲测有效

    在IT领域,尤其是在前端开发中,"checkbox二级联动"是一个常见的功能需求,它涉及到用户界面交互和数据管理。这个功能通常用于实现多级选择或分类筛选,例如在组织结构、产品分类或者层级菜单中。本案例中的...

    树的CheckBox选择联动

    当选择或取消选择TreeView的CheckBoxes的状态时,它的子节点和相关的父节点状态都随之变化。

    checkbox联动选择

    复选框联动, 选中某一个节点,该节点的所有子节点均置为选中,该节点的所有父节点均置为选中

    jquery input checkbox 联动

    本文将深入探讨如何在jQuery环境下实现输入框(input)复选框(checkbox)的联动效果,即当某个复选框被选中时,能够自动触发关联的上级或下级复选框的状态改变。 ### 1. jQuery 基础 首先,确保你的项目已经引入...

    wpf实现的checkbox层级联动树形菜单

    总结来说,实现WPF中的Checkbox层级联动树形菜单涉及以下关键点:定义数据模型、绑定数据、创建右键菜单、实现事件处理程序以及处理父子节点的联动。通过这些步骤,我们可以创建出一个功能完备且易于操作的树形菜单...

    js多级联动多选checkbox插件

    在JavaScript开发中,多级联动多选checkbox插件是一种常见的交互元素,用于实现层次结构数据的筛选和选择。这类插件通常用在如地区选择、类别分类等场景,用户可以通过逐级选择来过滤出需要的结果。`cascadebox-...

    VB的Treeview控件复选框如何做到父子多级节点联动代码实例

    在VB(Visual Basic)编程中,`TreeView`控件是一个常用元素,用于...总之,通过监听`BeforeCheck`事件并适当地更新节点状态,可以实现在VB中`TreeView`控件的复选框父子多级联动功能,提供一个用户友好的交互体验。

    treeview父子节点联动

    父子节点联动是指当用户操作父节点时(如点击、选中),子节点会相应地进行更新或显示,这样的交互设计能提升用户体验,让用户更好地理解和操作数据结构。在ASP.NET中,`treeview`控件提供了丰富的功能,可以方便地...

    C# 解决双击TreeView表里checkbox本身Bug问题

    一个WinForm的TreeView,某node的CheckBox初始状态为false,当双击这个node的checkbox时,会出现很奇怪的情况: 第一次双击checkbox,checkbox显示的状态会切换两次状态,unchecked-&gt; checked-&gt; unchecked,而...

    完美解决ListView和CheckBox的焦点冲突及CheckBox的复用问题

    本文将详细探讨这些问题以及如何通过优化来实现“完美解决ListView和CheckBox的焦点冲突及CheckBox的复用问题”。 一、焦点冲突问题 在ListView中,通常一个列表项被点击时,焦点会自动转移到该列表项,但如果列表...

    VirtualTree之Header与Node的CheckBox联动的例子

    项目中需要实现Header与Node的CheckBox联动,在VirtualStringTree的Demo中没有发现相关的例子,网友提供的众多例子中也未涉及这方面的内容。代码只有短短几行,现上传供有同样需求的朋友参考。

    CheckBox分级选中 复选框 上下级 联动

    在IT行业中,尤其是在前端开发领域,"CheckBox分级选中 复选框 上下级 联动"是一个常见的功能需求,通常应用于具有层级结构的数据展示和交互场景,比如树形菜单、组织架构选择等。这个功能的核心是实现复选框...

    inputcheckbox连动

    @param LableIdString label 表标前缀 这个用于多个分级 如 当前为第一级中有 input[type='checkbox'] value = 1 如果下面有级 则在此inpu 下应该加入 &lt;label id='v1'&gt; 以此类推 调用方式 $("#ViewSetS")....

    Android完美解决ListView复用导致的Checkbox状态混乱问题

    然而,ListView的复用机制有时会导致一些问题,特别是在涉及复选框(Checkbox)的状态管理时。本篇文章将详细探讨这个问题,并提供一个完美的解决方案。 一、问题背景 ListView通过ViewHolder模式实现高效的滚动...

    Asp.Net TreeView Checkbox

    总之,"Asp.Net TreeView Checkbox"是一个实现树形结构数据选择的功能,通过设置TreeNode的属性和编写前端脚本,可以创建一个具有父子级Checkbox联动的用户界面。这个功能在管理大量分类数据或进行多级选择操作的...

Global site tag (gtag.js) - Google Analytics