2010-01-20 15 views
83

Duplicar posible:
Select values of checkbox group with jQueryjQuery matriz de todas las casillas de verificación seleccionadas (por clase)

En HTML que tiene un conjunto de casillas de verificación agrupados por una clase. Quiero obtener una matriz en jQuery que contenga todas las casillas de verificación seleccionadas/marcadas para esa clase (de modo que se ignoren otras casillas en la página).

Así código HTML siguiente manera:

<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" /> 

devolvería los valores de las controladas/seleccionados group1 casillas de verificación en una matriz de esta manera:

var values = [ 18, 55, 10 ]; 

Respuesta

202

Puede utilizar el :checkbox y :checked pseudo-selectores y el selector .class, con eso usted se asegurará de que está obteniendo los elementos correctos, solo casilla de verificación marcada s con la clase que especifique.

entonces usted puede utilizar fácilmente el método Traversing/map para obtener una matriz de valores:

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

¿Cómo harías esto usando el nombre de los elementos en lugar de una clase? – user387049

+6

Utilicé esto como referencia, gracias. Y para responder al último comentario, use el selector: $ ('input: checkbox [name = SOMENAME]') –

+0

@ user387049 puede usarlo así (suponga que sector4 es el nombre de la matriz de casilla de verificación): '$ (" input [name = 'sector4 []']: casilla de verificación: marcada "). each (function() {});' – Azmeer

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

... le dará un objeto jQuery, y no una matriz. –

+0

gracias Stefan, no se dio cuenta de que se necesitaba una matriz de valores :) – Anurag

5

También puede agregar underscore.js a su proyecto y podrá hacerlo en una sola línea:

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

"una línea"; esa es una * línea muy larga * –

+0

@JezenThomas Me hiciste reir con tu comentario. :) – Mukesh

Cuestiones relacionadas