2010-01-20 7 views
83

Possible en double:
Select values of checkbox group with jQueryjQuery Tableau de toutes les cases sélectionnées (par classe)

En HTML j'ai un ensemble de cases regroupées par une classe. Je veux obtenir un tableau dans jQuery contenant toutes les cases cochées/cochées pour cette classe (donc les autres cases à cocher de la page sont ignorées).

donc le code HTML comme ceci:

<input type="checkbox" class="group1" value="18" checked="checked" /> 
<input type="checkbox" class="group1" value="20" /> 
<input type="checkbox" class="group1" value="15" /> 
<input type="checkbox" class="group2" value="14" /> 
<input type="checkbox" class="group1" value="55" checked="checked" /> 
<input type="checkbox" class="group1" value="10" checked="checked" /> 
<input type="checkbox" class="group2" value="77" checked="checked" /> 
<input type="checkbox" class="group1" value="11" /> 

reviendriez les valeurs des cochée/sélectionnées group1 cases dans un tableau comme celui-ci:

var values = [ 18, 55, 10 ]; 

Répondre

202

Vous pouvez utiliser le :checkbox et :checked pseudo-sélecteurs et le .class sélecteur, avec cela, vous vous assurerez que vous obtenez les bons éléments, seulement cochée case à cocher s avec la classe que vous spécifiez.

Ensuite, vous pouvez facilement utiliser la méthode Traversing/map pour obtenir un tableau de valeurs:

var values = $('input:checkbox:checked.group1').map(function() { 
    return this.value; 
}).get(); // ["18", "55", "10"] 
+0

Comment feriez-vous cela en utilisant le nom des éléments au lieu d'une classe? – user387049

+6

Utilisé ceci pour la référence, merci. Et pour répondre au dernier commentaire, utilisez le sélecteur: $ ('input: case à cocher [name = SOMENAME]') –

+0

@ user387049 vous pouvez l'utiliser ainsi (supposons que sector4 est le nom du tableau de cases à cocher): '$ (" input [nom = 'secteur4 []']: case à cocher: cochée "). each (function() {});' – Azmeer

31
var matches = []; 
$(".className:checked").each(function() { 
    matches.push(this.value); 
}); 
+0

... vous donnera un objet jQuery, et non un tableau. –

+0

merci Stefan, n'a pas réalisé un tableau de valeurs était nécessaire :) – Anurag

5

Vous pouvez également ajouter underscore.js à votre projet et sera en mesure de le faire en une ligne:

_.map($("input[name='category_ids[]']:checked"), function(el){return $(el).val()}) 
+2

"une ligne"; c'est une * ligne très longue ... –

+0

@JezenThomas Tu m'as fait rire avec ton commentaire. :) – Mukesh

Questions connexes