Apparemment, cela ne fonctionne pas:
select[multiple]{
height: 100%;
}
cela permet au select d'avoir 100% de la hauteur de la page ...
auto
ne fonctionne pas non plus, j'ai toujours la barre de défilement verticale.
D'autres idées?
Je suppose que vous pouvez utiliser l'attribut size
. Cela fonctionne dans tous les navigateurs récents.
<select name="courses" multiple="multiple" size="30" style="height: 100%;">
Vous pouvez le faire en utilisant l'attribut size
de la balise select
. Si vous avez 8 options, alors vous le feriez comme ceci:
<select name='courses' multiple="multiple" size='8'>
Vieux, mais cela fera ce que vous recherchez sans avoir besoin de jQuery. Le débordement caché supprime la barre de défilement et le javascript lui donne la bonne taille.
<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>
Et juste une petite quantité de javascript
var select = document.getElementById('select');
select.size = select.length;
Pour jQuery, vous pouvez essayer ceci. Je fais toujours ce qui suit et ça marche.
$(function () {
$("#multiSelect").attr("size",$("#multiSelect option").length);
});
Vous ne pouvez le faire qu'en Javascript/JQuery, vous pouvez le faire avec le JQuery suivant (en supposant que vous ayez donné à votre sélection un identifiant de multiselect):
$(function () {
$("#multiSelect").css("height", parseInt($("#multiSelect option").length) * 20);
});
Je sais que la question est ancienne, mais comment le sujet n'est pas fermé, je vais aider.
L'attribut "taille" résoudra votre problème.
Exemple:
<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>
Vous pouvez le faire avec javascript simple ...
<select multiple="multiple" size="return this.length();">
... ou limite la hauteur jusqu'au nombre d'enregistrements ...
<select multiple="multiple" size="return this.length() > 10 ? this.length(): 10;">
L'utilisation de l'attribut size est la solution la plus pratique. Toutefois, l'application de cet élément aux éléments select ne comporte que deux ou trois options.
Simple JavaScript peut être utilisé pour définir automatiquement l'attribut size sur la valeur correcte, par exemple. voir ce violon .
$(function() {
$("#autoheight").attr("size", parseInt($("#autoheight option").length));
});
Comme mentionné ci-dessus, cette solution ne résout pas le problème lorsqu'il n'y a que deux ou trois options.
friends: si vous récupérez les données depuis une base de données: vous pouvez appeler ceci $ registers = * _num_rows (Result_query) puis
<select size=<?=$registers + 1; ?>">
Pour ajuster la taille (hauteur) de toutes les sélections multiples au nombre d'options, utilisez jQuery:
$('select[multiple = multiple]').each(function() {
$(this).attr('size', $(this).find('option').length)
})
J'ai eu cette exigence récemment et utilisé d'autres posts de cette question pour créer ce script:
$("select[multiple]").each(function() {
$(this).css("height","100%")
.attr("size",this.length);
})
Pour supprimer la barre de défilement, ajoutez le CSS suivant:
select[multiple] {
overflow-y: auto;
}
Voici un extrait:
select[multiple] {
overflow-y: auto;
}
<select>
<option value="1">One</option>
<option value="2">Two</option>
<option value="3">Three</option>
</select>
<select multiple size="3">
<option value="1">One</option>
<option value="2">Two</option>
<option value="3">Three</option>
</select>