19

I'm trying to create a comma separated list from what is checked on the form.

var $StateIDs = $(':checked');
var StateIDs = '';
for (i=0, j = $StateIDs.length; i < j; i++) {
    StateIDs += $StateIDs[i].val();
    if (i == j) break;
    StateIDs += ',';
}

There's probably a 1-liner that can do this, or a single function.

John Strickler
  • 25,151
  • 4
  • 52
  • 68
Phillip Senn
  • 46,771
  • 90
  • 257
  • 373

4 Answers4

62

map() is going to be your friend here.

var StateIDs = $(':checked').map(function() { 
    return this.value; 
}).get().join(',');

StateIDs will be a comma-separated string.


Step-by-step - What is going on?

$(':checked')
// Returns jQuery array-like object of all checked inputs in the document
// Output: [DOMElement, DOMElement]

$(':checked').map(fn);
// Transforms each DOMElement based on the mapping function provided above
// Output: ["CA", "VA"]  (still a jQuery array-like object)

$(':checked').map(fn).get();
// Retrieve the native Array object from within the jQuery object
// Output: ["CA", "VA"]

$(':checked').map(fn).get().join(',');
// .join() will concactenate each string in the array using ','
// Output: "CA,VA"
John Strickler
  • 25,151
  • 4
  • 52
  • 68
4
var ids = '';
$(':checked').each(function(){
    ids += $(this).val() + ',';
});

Writing blind, so I have not tested.

Tim Joyce
  • 4,487
  • 5
  • 34
  • 50
2
$.each([52, 97], function(index, value) { 
  alert(index + ': ' + value); 
});
beardww
  • 51
  • 1
  • 5
1

Check the second answer here. It gives you nicely simplified code for exactly what you're doing.

Community
  • 1
  • 1
Karelzarath
  • 287
  • 1
  • 11