JQuery - Multiple Select Options
I am trying to grab all selected items in the following select multiple and separate them by a comma. The code is below:
<select id="ps-type" name="ps-type" multiple="multiple" size="5">
<option>Residential - Wall Insulation</option>
<option>Residential - Attic /Crawl Space Insulation</option>
<option>Residential - Foundation Insulation</option>
<option>Residential - Exterior Roof System</option>
<option>Commercial - Wall Insulation</option>
<option>Commercial - Air Barrier System (Walltite)</option>
<option>Commercial - Roof System</option>
</select>
The result I am looking for is the following:
Residential - Wall Insulation, Commercial - Wall Insulation, ...
Solution 1:
You can use the :selected
selector, and the inline $.map()
function as part of your chain.
$("option:selected").map(function(){ return this.value }).get().join(", ");
Solution 2:
Add the values to an array and use join
to create the string:
var items = [];
$('#ps-type option:selected').each(function(){ items.push($(this).val()); });
var result = items.join(', ');
Solution 3:
On a multiple select element, the val
command of the select
element will return an array of the selected options values. If no values are present, the text of the element is used:
var output = $("#ps-type").val().join(', ');
update: However, when there are no selected options val()
returns null
not an empty array. One way to get around this:
var output = ($("#ps-type").val() || []).join(', ');
You can play around with it in this demo I put together.
From the docs:
In the case of
<select multiple="multiple">
elements, the.val()
method returns an array containing each selected option.
Solution 4:
var list = "";
$('#ps-type option:selected').each(function(){
list += this.value + ", ";
});
return list.substr(0, list.length - 2);