2009-12-07 122 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')); 
});