2012-12-18 61 views
3

我有多組複選框和無線電。
每個組都有一個唯一的名稱屬性,但我不知道這些名稱。jQuery獨特名稱選擇器

我正在尋找一個選擇器來獲取每個組,然後通過它們循環以確保至少有一個項目被選中。

很明顯,我可以做一個每個比較名稱,創建一個唯一的數組,然後循環遍歷數組,但我寧願一個一個地做這些,以便更精通。建議?

+3

你能告訴我們一些標記,這樣我們就可以幫助嗎?你有什麼嘗試? –

+2

我不認爲這會比你描述的要容易得多。 –

+0

我不認爲css 3對於你所描述的邏輯有選擇器,最後你將需要你提出的建議。 – slash28cu

回答

1

您可以遍歷元素並將每個組的計數存儲爲對象中的屬性。例如:

var names = {}; 
$(':checkbox').each(function(){ 
    var name = $(this).attr('name'); 
    names[name] = (names[name] || 0) + ($(this).is(':checked') ? 1 : 0); 
}); 
$.each(names, function(i, e){ 
    if (e == 0) { 
     alert('No checkbox in group ' + i + ' is checked.'); 
    } 
}); 

演示:http://jsfiddle.net/d4mTs/

+0

你正在做兩個我試圖避免的陳述。但是不管代碼如何。 –

+0

@ResidualEnvy:第二個是循環遍歷結果中的組。你不能在一個循環中完成所有工作,因爲除非你已經擁有了所有的組以及每個組中有多少個複選框,否則你不知道組中是否有複選框沒有勾選。組。 – Guffa

0

類似的解決方案(從Guffa分叉),使用jQuery的:檢查選擇器。

var names = {}; 
$(':checkbox').each(function(){ 
    var name = $(this).attr('name'); 
    if (names[name] == null) 
    { 
     var c = $("input[name='" + name + "']:checked").length; 
     names[name] = c; 
     if (c == 0) 
      alert('Not checked: ' + name); 
    } 
}); 

http://jsfiddle.net/h8ayM/