Reputation: 5
I have a grid with each row having a drop down list to select a state. What I want to do is upon submit of the form, grab each value selected (if none skip over)
<select name="state" class="dd1">
<option value="0">Select A State (optional)</option>
<option value="AL">Alabama</option>
<option value="AK">Alaska</option>
</select>
Now I can have up to 50 rows with the same select object in each row.
Currently I have the following put together that sort of works.
function UpdateCustomers()
{
var getStatesUpdated = $("select.dd1").each(function (i) {
var $this = $(this);
if ($this.val() > 0) {
return $this.val();
}
});
}
I say the above sort of works because if I put in a alert box in the above if statement, it lists each value selected. My goal here is to return a string of states comma delimited so getStatesUpdated would look like this if I selected 3 states out of 50 rows.
getStatesUpdated = "CO,MI,FL";
How can I return each selected item in a comma delimited string?
Thanks so much
Upvotes: 0
Views: 2486
Reputation: 171700
Solution using map()
, filter()
and join()
function UpdateCustomers() {
return $("select.dd1").map(function () {
return this.value;
}).get().filter(function(val){
return val !== "0"
}).join();
}
$("button").click(function(){
console.log(UpdateCustomers());
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<select name="state" class="dd1">
<option value="0">Select A State (optional)</option>
<option value="AL" selected>Alabama</option>
<option value="AK">Alaska</option>
</select>
<select name="state" class="dd1">
<option value="0">Select A State (optional)</option>
<option value="AL">Alabama</option>
<option value="AK" selected>Alaska</option>
</select>
<select name="state" class="dd1">
<option value="0">Select A State (optional)</option>
<option value="AL">Alabama</option>
<option value="AK">Alaska</option>
</select>
<button>Log selected</button>
Upvotes: 1
Reputation: 33943
jQuery .each() does not return a string as you seem to expect... But is returning jQuery
... Read, the collection of the select.dd1
elements.
You should declare an array in the updateCustomers
function... Then use .each()
to loop the elements, then return a string made of the array elements joined with comas...
function UpdateCustomers() {
var getStatesUpdated = [];
$("select.dd1").each(function (i) {
var $this = $(this);
if ($this.val() !== "0") {
getStatesUpdated.push($this.val())
}
});
return getStatesUpdated.join(",")
}
$("button").click(function(){
console.log(UpdateCustomers());
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<select name="state" class="dd1">
<option value="0">Select A State (optional)</option>
<option value="AL">Alabama</option>
<option value="AK">Alaska</option>
</select>
<select name="state" class="dd1">
<option value="0">Select A State (optional)</option>
<option value="AL">Alabama</option>
<option value="AK">Alaska</option>
</select>
<select name="state" class="dd1">
<option value="0">Select A State (optional)</option>
<option value="AL">Alabama</option>
<option value="AK">Alaska</option>
</select>
<button>Log selected</button>
Upvotes: 1