2013-02-13 334 views
11

首先,只是想说我对jQuery没有希望。jQuery选择所有儿童复选框

我一直在寻找从一个职位上这里一些代码,选择每个父复选框(和作品):

$(function() { 
    $(":checkbox").change(function() { 
    $(this).parents().children(':checkbox').attr('checked', this.checked); 
    }); 
}); 

我们使用<ul> <li>树视图结构,每个<li>都有一个复选框。 我想做与上述相反的操作,并在所有子复选框上执行相同的复选框选择。

任何人都可以修改上述做到这一点?

只是要注意,我们使用的剃刀和每个复选框是@ Html.CheckboxFor所以输出线沿线的:

<input name="Survey.Buildings[0].IsSelected" type="checkbox" value="true" checked="checked" data-val="true" data-val-required="The Selected? field is required." id="Survey_Buildings_0__IsSelected" /> 
<input name="Survey.Buildings[0].IsSelected" type="hidden" value="false" /> 
  • 编辑2:

好,我有固定的HTML和结构现在看起来像:

<ul> 
    <li> Cbx1 
     <ul> 
      <li> Cbx 2 </li> 
     </ul> 
    </li> 
    <li> Cbx3 </li> 
    <li> Cbx4 
     <ul> 
      <li> Cbx 5 </li> 
      <li> Cbx 6 </li> 
     </ul> 
    </li> 
</ul> 

因此,如果Cbx4被检查Cbx5 a ND 6将被检查,如果它未选中,他们将选中

非常感谢

安迪

+0

你将不得不提供一些具体的HTML代码段,并准确描述了箱应检查当某一箱变。 – nbrooks 2013-02-13 12:29:09

+0

更新我的文章 – 2013-02-13 12:34:29

+0

如果Cbx2没有检查到任何事情会发生,我很想切换子复选框。所以cbx1会切换cbx2而不是反过来,而cbx4会切换cbx5和6. – 2013-02-13 12:45:47

回答

27

jsFiddle Demo

$(function() { 
    $("input[type='checkbox']").change(function() { 
    $(this).siblings('ul') 
      .find("input[type='checkbox']") 
      .prop('checked', this.checked); 
    }); 
}); 
+0

问题是,在你的jsfiddle例子中,当选择3时,选择了4并且它不是3的子。所以在我的帖子的例子中Cbx3被选中没有其他的会受到影响,因为它没有孩子LI的 – 2013-02-13 12:43:02

+0

我看到是的,5和6应该存在于同一个LI中,这可能是我的问题,我会修改我的HTML,并且你的例子会工作吗? – 2013-02-13 12:49:04

+0

我已更新我的文章以反映HTML现在的样子。正如你所看到的,CBx5和CBX6现在是CBX4列表中的一个子列表。那有意义吗? – 2013-02-13 12:58:46

0
$(function() { 
    $(":checkbox").change(function() { 
    $(this).children(':checkbox').attr('checked', this.checked); 
    }); 
}); 

不是真的与你的问题清楚,但你可以通过删除父再试一次()如上所示。