Apparently this doesn't work:
select[multiple]{
height: 100%;
}
it makes the select have 100% page height...
auto
doesn't work either, I still get the vertical scrollbar.
Any other ideas?
Apparently this doesn't work:
select[multiple]{
height: 100%;
}
it makes the select have 100% page height...
auto
doesn't work either, I still get the vertical scrollbar.
Any other ideas?
I guess you can use the size
attribute. It works in all recent browsers.
<select name="courses" multiple="multiple" size="30" style="height: 100%;">
You can do this using the size
attribute in the select
tag.
Supposing you have 8 options, then you would do it like:
<select name='courses' multiple="multiple" size='8'>
Old, but this will do what you're after without need for jquery. The hidden overflow gets rid of the scrollbar, and the javascript makes it the right size.
<select multiple='multiple' id='select' style='overflow:hidden'>
<option value='foo'>foo</option>
<option value='bar'>bar</option>
<option value='abc'>abc</option>
<option value='def'>def</option>
<option value='xyz'>xyz</option>
</select>
And just a tiny amount of javascript
var select = document.getElementById('select');
select.size = select.length;
For jQuery you can try this. I always do the following and it works.
$(function () {
$("#multiSelect").attr("size",$("#multiSelect option").length);
});
You can only do this in Javascript/JQuery, you can do it with the following JQuery (assuming you've gave your select an id of multiselect):
$(function () {
$("#multiSelect").css("height", parseInt($("#multiSelect option").length) * 20);
});
Demo: http://jsfiddle.net/AZEFU/
I know the question is old, but how the topic is not closed I'll give my help.
The attribute "size" will resolve your problem.
Example:
<select name="courses" multiple="multiple" size="30">
<select id="list">
<optgroup label="Group">
<option value="1">1</option>
</optgroup>
</select>
<script>
const l = document.getElementById("list")
l.setAttribute("size", l.childElementCount + l.length)
</script>
https://jsfiddle.net/maars/ou5f3jzy/
You can do this with simple javascript...
<select multiple="multiple" size="return this.length();">
...or limit height until number-of-records...
<select multiple="multiple" size="return this.length() > 10 ? this.length(): 10;">
friends: if you retrieve de data from a DB: you can call this $registers = *_num_rows( Result_query ) then
<select size=<?=$registers + 1; ?>">
Using the size attribute is the most practical solution, however there are quirks when it is applied to select elements with only two or three options.
Simple JavaScript can be used to set the size attribute to the correct value automatically, e.g. see this fiddle.
$(function() {
$("#autoheight").attr("size", parseInt($("#autoheight option").length));
});
As mentioned above, this solution does not solve the issue when there are only two or three options.
I had this requirement recently and used other posts from this question to create this script:
$("select[multiple]").each(function() {
$(this).css("height","100%")
.attr("size",this.length);
})
To adjust the size (height) of all multiple selects to the number of options, use jQuery:
$('select[multiple = multiple]').each(function() {
$(this).attr('size', $(this).find('option').length)
})
The way a select box is rendered is determined by the browser itself. So every browser will show you the height of the option list box in another height. You can't influence that. The only way you can change that is to make an own select from the scratch.