Reputation: 136
I want to insert multi select dropdown value to a var by jquery or javascript. for example:
<select class="form-control ltr input-md input-group-addon" id="tld" name="tld" multiple="multiple">
<option value="com" selected="">.com</option>
<option value="ir">.ir</option>
<option value="net">.net</option>
<option value="org">.org</option>
<option value="co">.co</option>
<option value="xyz">.xyz</option>
<option value="biz">.biz</option>
<option value="info">.info</option>
<option value="asia">.asia</option>
<option value="club">.club</option>
<option value="us">.us</option>
<option value="mobi">.mobi</option>
<option value="name">.name</option>
</select>
<script>
//var tlds = ['info', 'com', 'net', 'org', 'co', 'biz'];
var tlds = [multi select value goes here like above comment!];
tlds.forEach(function(tld) {
//some work
});
</script>
any help? Thank you
Upvotes: 1
Views: 3260
Reputation: 22500
Try with map().get()
method for create the array from element .Each time you change the selection array was created depend on the selected value.
$('select').change(function(){
var res = $(this).children('option:selected').map(function(){
return $(this).val()
}).get()
console.log(res)
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select class="form-control ltr input-md input-group-addon" id="tld" name="tld" multiple="multiple">
<option value="com" selected="">.com</option>
<option value="ir">.ir</option>
<option value="net">.net</option>
<option value="org">.org</option>
<option value="co">.co</option>
<option value="xyz">.xyz</option>
<option value="biz">.biz</option>
<option value="info">.info</option>
<option value="asia">.asia</option>
<option value="club">.club</option>
<option value="us">.us</option>
<option value="mobi">.mobi</option>
<option value="name">.name</option>
</select>
Upvotes: 1
Reputation: 3917
Iterate over the option and push the values in a array.
var tlds = [];
$("#tld > option:selected").each(function(){
tlds.push(this.value);
});
console.log(tlds);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select class="form-control ltr input-md input-group-addon" id="tld" name="tld" multiple="multiple">
<option value="com" selected="">.com</option>
<option value="ir" selected="">.ir</option>
<option value="net" selected="">.net</option>
<option value="org">.org</option>
<option value="co">.co</option>
<option value="xyz">.xyz</option>
<option value="biz">.biz</option>
<option value="info">.info</option>
<option value="asia">.asia</option>
<option value="club">.club</option>
<option value="us">.us</option>
<option value="mobi">.mobi</option>
<option value="name">.name</option>
</select>
Upvotes: 1
Reputation: 14179
May this help you:
var tlds = (function(select) {
var res = [];
select.addEventListener('change', function(event) {
var values = Array
.prototype
.map
.call(event.target.selectedOptions, function(a) {
return a.value;
})
;
var old = res.slice();
res.length = 0;
res.push.apply(res, values);
res.onValuesChange && res.onValuesChange(event, old, res);
});
return res;
})(document.getElementById('tld'));
tlds.onValuesChange = function(event, oldValues, newValues) {
console.log({oldValues, newValues});
}
<select id="tld" multiple>
<option value="com" selected="">.com</option>
<option value="ir">.ir</option>
<option value="net">.net</option>
<option value="org">.org</option>
<option value="co">.co</option>
<option value="xyz">.xyz</option>
<option value="biz">.biz</option>
<option value="info">.info</option>
<option value="asia">.asia</option>
<option value="club">.club</option>
<option value="us">.us</option>
<option value="mobi">.mobi</option>
<option value="name">.name</option>
</select>
Upvotes: 1
Reputation: 4401
Call onChange
function every time an option is selected or unselected and push the selected values to the tlds
array.
//var tlds = ['info', 'com', 'net', 'org', 'co', 'biz'];
var tlds = [];
function selectTld() {
tlds = [];
var vals = $('#tld').val();
tlds.push(vals);
$("#selectedValues").html(tlds);
}
tlds.forEach(function(tld) {
//some work
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select class="form-control ltr input-md input-group-addon" id="tld" name="tld" multiple="multiple" onChange="selectTld()">
<option value="com" selected="">.com</option>
<option value="ir">.ir</option>
<option value="net">.net</option>
<option value="org">.org</option>
<option value="co">.co</option>
<option value="xyz">.xyz</option>
<option value="biz">.biz</option>
<option value="info">.info</option>
<option value="asia">.asia</option>
<option value="club">.club</option>
<option value="us">.us</option>
<option value="mobi">.mobi</option>
<option value="name">.name</option>
</select>
<div id="selectedValues"></div>
Upvotes: 1
Reputation: 3
You can use this for javascript to get the value from the elementId:
var e = document.getElementById("tld");
var value = e.options[e.selectedIndex].value;
var text = e.options[e.selectedIndex].text;
And then proceed with a loop, looping through all the options and adding it all to an array.
Upvotes: 0
Reputation: 8277
jQuery
val()
function returns an array when executed on a multiselect dropdown.
var tlds = $("#tld").val();
console.log(tlds);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select class="form-control ltr input-md input-group-addon" id="tld" name="tld" multiple="multiple">
<option value="com" selected="">.com</option>
<option value="ir" selected="">.ir</option>
<option value="net" selected="">.net</option>
<option value="org">.org</option>
<option value="co">.co</option>
<option value="xyz">.xyz</option>
<option value="biz">.biz</option>
<option value="info">.info</option>
<option value="asia">.asia</option>
<option value="club">.club</option>
<option value="us">.us</option>
<option value="mobi">.mobi</option>
<option value="name">.name</option>
</select>
Upvotes: 1