2009-12-07 94 views
0

我有一个复选框列表,看起来像这样:jQuery的复选框操作

<table> 
<tr><td><input type="checkbox" /> <label>Bla</label></td></tr> 
<tr><td><input type="checkbox" /> <label> + Bla Sub 1</label></td></tr> 
<tr><td><input type="checkbox" /> <label> + Bla Sub 2</label></td></tr> 
<tr><td><input type="checkbox" /> <label> + Bla Sub 3</label></td></tr> 
<tr><td><input type="checkbox" /> <label> + Bla Sub 4</label></td></tr> 
<tr><td><input type="checkbox" /> <label> + Bla Sub 5</label></td></tr> 
<tr><td><input type="checkbox" /> <label> + Bla Sub 6</label></td></tr> 
<tr><td><input type="checkbox" /> <label> Blub</label></td></tr> 
<tr><td><input type="checkbox" /> <label> + Blub Sub 1</label></td></tr> 
<tr><td><input type="checkbox" /> <label> + Blub Sub 2</label></td></tr> 
<tr><td><input type="checkbox" /> <label> + Blub Sub 3</label></td></tr> 
<tr><td><input type="checkbox" /> <label> + Blub Sub 4</label></td></tr> 
<tr><td><input type="checkbox" /> <label> Derp</label></td></tr> 
<tr><td><input type="checkbox" /> <label> etc...</label></td></tr> 
</table> 

所以,我要启用“选择子类别”功能,这样的列表。不幸的是,由于ASP.NET的ID渲染搞砸了,我无法通过它们的ID或名称来调用类别,所以我必须读出每个节点的内容并取消/选中以+开头的所有复选框。

所以,如果用户选择Bla,所有的子列表+ Bla Sub #也应该选择,反之亦然。

这怎么可能?我使用jQuery,所以它不应该那么难,但我不能很好地开始如何检查列表内容...

+0

我忘了提,所有的标签和复选框是在一个表...感谢微软,这就是你如何创建一个列表?... – 2009-12-07 12:05:22

+0

弗洛里安,请不要在你发布在StackOverflow上的任何内容中使用发誓的单词。你的问题将被编辑,以消除脏话。 – 2013-01-31 20:34:53

回答

1

这应该工作:

$('ul li:not(:contains("+"))').click(function(
var current = $(this), check; 
check = (current.attr('checked')^true); 
$('ul li:contains("'+current.text()+'") checkbox').attr('checked',check); 
} 

我没有测试它虽然。它当然应该让你知道需要什么。评论你是否有任何问题。

+0

它以某种方式工作,但不是打算...我打破了你的功能,主要的问题似乎是迭代,*检查所有包含“+”*以及将其翻译成jQuery的以下框: - / – 2009-12-07 10:55:28

0

您可以轻松地添加一个类到这些子复选框在ASP.net ,然后使用$('。className')遍历它们。

+0

问题是,该列表是使用数据库表上的'DataBind()'和'DataSource()'自动生成的,所以我无法操作列表项本身: -/ – 2009-12-07 10:28:46

0

这将使就是这样,当你选中“布拉”所有“+布拉*”将得到遏制:

$('label:not(:contains(+))').prev(':checkbox').click(function(){ 
    var $this = $(this); 
    $('label:contains("'+$this.next('label').text()+'")').prev(':checkbox') 
    .attr('checked',$this.is(':checked')); 
});