2010-01-20 11 views
83

Mögliche Duplizieren:
Select values of checkbox group with jQueryjQuery Array aller ausgewählten Kontrollkästchen (nach Klasse)

In HTML habe ich eine Reihe von Kontrollkästchen von einer Klasse zusammengefasst. Ich möchte ein Array in jQuery erhalten, das alle Kontrollkästchen enthält, die für diese Klasse ausgewählt/markiert sind (andere Kontrollkästchen auf der Seite werden ignoriert).

So HTML-Code wie folgt aus:

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

Würden die Werte der geprüften/ausgewählten group1 Kontrollkästchen in einem Array wie folgt zurück:

var values = [ 18, 55, 10 ]; 

Antwort

202

Sie können die :checkbox verwenden und :checked Pseudo-Selektoren und die .class Selektor, mit dem Sie sicherstellen, dass Sie die richtigen Elemente bekommen, nur Kontrollkästchen aktiviert s mit der Klasse, die Sie angeben.

Dann können Sie bequem die Traversing/map Methode verwenden, um ein Array von Werten zu erhalten:

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

Wie würdest du das machen, indem du den Elementnamen anstelle einer Klasse verwendest? – user387049

+6

Verwendet dies als Referenz, danke. Um den letzten Kommentar zu beantworten, benutzen Sie selector: $ ('input: checkbox [name = SOMENAME]') –

+0

@ user387049 Sie können es so benutzen (nehmen wir an, dass Sektor4 der Name der Checkbox ist): '$ (" input [name = 'sector4 []': checkbox: checked "). je (function() {});' – Azmeer

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

... gibt Ihnen ein jQuery-Objekt und kein Array. –

+0

danke Stefan, habe nicht realisiert, dass eine Reihe von Werten benötigt wurde :) – Anurag

5

Sie können auch underscore.js zu Ihrem Projekt hinzufügen und es wird zu tun, in einer Zeile in der Lage:

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

"eine Linie"; das ist eine * sehr lange * Linie ... –

+0

@JezenThomas Du hast mich mit deinem Kommentar zum Lachen gebracht. :) – Mukesh

Verwandte Themen