2010-01-28 4 views
171

Voglio ottenere un elenco di nomi di caselle selezionate in un div con un determinato ID. Come lo farei usando jQuery?Ottieni un elenco di caselle di controllo in un div utilizzando jQuery

Ad esempio, per questo div voglio ottenere array ["c_n_0"; "c_n_3"] o una stringa "c_n_0; c_n_3"

<div id="checkboxes"> 
    <input id="chkbx_0" type="checkbox" name="c_n_0" checked="checked" />Option 1 
    <input id="chkbx_1" type="checkbox" name="c_n_1" />Option 2 
    <input id="chkbx_2" type="checkbox" name="c_n_2" />Option 3 
    <input id="chkbx_3" type="checkbox" name="c_n_3" checked="checked" />Option 4 
</div> 

risposta

333

Combinazione di due risposte precedenti:

var selected = []; 
$('#checkboxes input:checked').each(function() { 
    selected.push($(this).attr('name')); 
}); 
+9

e un'altra combo: var selected = $ ('#checkboxes input: checked'). map (function (i, el) {return el.name;}). get(); // aggiungi .join (';') per ottenere una stringa combinata – roberkules

+6

aggiunto http://jsfiddle.net/dvCmR/ – roberkules

+1

@Alex LE. Come ottengo solo il conteggio delle caselle selezionate? Devo solo controllare se una qualsiasi delle caselle all'interno del div è selezionata o meno. – ashishjmeshram

38

Questo farebbe?

var selected = []; 
$('div#checkboxes input[type=checkbox]').each(function() { 
    if ($(this).is(":checked")) { 
     selected.push($(this).attr('name')); 
    } 
}); 
+8

$ (questo) .checked non funziona. Utilizzare if ($ (this) .attr ('checked')) o if ($ (this) .is (': checked')) –

34
$("#checkboxes").children("input:checked") 

vi darà un allineamento degli elementi stessi. Se avete solo bisogno di specificamente i nomi:

$("#checkboxes").children("input:checked").map(function() { 
    return this.name; 
}); 
+2

Penso che dovrebbe essere restituito this.name o return $ (this) .attr ('nome'); –

+4

'$ (" # checkboxes: checked "). Map (...)' sarebbe più conciso. Come fa notare Jansen, dovrebbe essere '$ (this) .attr (" nome ")'; ma considererei un semplice 'this.name' che dovrebbe essere altrettanto compatibile. –

+0

sì, hai ragione, this.name sarebbe meglio – Corey

6

Questo funziona per me.

var selecteditems = []; 

$("#Div").find("input:checked").each(function (i, ob) { 
    selecteditems.push($(ob).val()); 
}); 
16

Avevo bisogno del conteggio di tutte le caselle di controllo selezionate. Invece di scrivere un ciclo ho fatto questo

$(".myCheckBoxClass:checked").length; 

confrontarlo con il numero totale di caselle di controllo per vedere se sono uguali. Spero che vi aiuterà qualcuno

4

si potrebbe anche dare loro tutte lo stesso nome so they are an array, ma dare loro diverse valori:

<div id="checkboxes"> 
    <input type="checkbox" name="c_n[]" value="c_n_0" checked="checked" />Option 1 
    <input type="checkbox" name="c_n[]" value="c_n_1" />Option 2 
    <input type="checkbox" name="c_n[]" value="c_n_2" />Option 3 
    <input type="checkbox" name="c_n[]" value="c_n_3" checked="checked" />Option 4 
</div> 

È possibile quindi ottenere solo il valore di solo quelli spuntati using map :

$('#checkboxes input:checked[name="c_n[]"]') 
      .map(function() { return $(this).val(); }).get()