J'ai une select
qui affiche initialement Sélectionnez la langue jusqu'à ce que l'utilisateur sélectionne une langue. Lorsque l'utilisateur ouvre la sélection, je ne veux pas qu'ils voient une option Sélectionnez langue , car ce n'est pas une option.
La solution de Kyle a parfaitement fonctionné pour moi alors j'ai fait mes recherches afin d'éviter tout Js et CSS, mais je m'en tiens à HTML . Ajouter une valeur de selected
à l'élément que nous souhaitons apparaître comme un en-tête à montrer en premier lieu comme un espace réservé. Quelque chose comme:
<option selected disabled>Choose here</option>
Le balisage complet devrait suivre les lignes suivantes:
<select>
<option selected disabled>Choose here</option>
<option value="1">One</option>
<option value="2">Two</option>
<option value="3">Three</option>
<option value="4">Four</option>
<option value="5">Five</option>
</select>
Vous pouvez jeter un oeil à ce violon , et voici le résultat:
Si vous ne voulez pas que le type de texte fictif apparaisse dans les options une fois qu'un utilisateur a cliqué sur la case de sélection, ajoutez simplement l'attribut hidden
comme suit:
<select>
<option selected disabled hidden>Choose here</option>
<option value="1">One</option>
<option value="2">Two</option>
<option value="3">Three</option>
<option value="4">Four</option>
<option value="5">Five</option>
</select>
Vérifiez le violon ici et la capture d'écran ci-dessous.
Voici la solution:
<select>
<option style="display:none;" selected>Select language</option>
<option>Option 1</option>
<option>Option 2</option>
</select>
La manière correcte et sémantique utilise une option de libellé espace réservé :
option
element en tant que premier enfant de la select
value
= ""
à cette option
option
required
à la select
Cela obligera l'utilisateur à sélectionner une autre option pour pouvoir soumettre le formulaire. Les navigateurs doivent restituer la option
comme souhaité:
Si un élément select contient une option d'étiquette d'espace réservé, l'utilisateur l’agent doit rendre cette option de manière à indiquer que c'est une étiquette plutôt qu'une option valide du contrôle.
Cependant, la plupart des navigateurs le rendront comme une option
normale. Nous devrons donc résoudre ce problème manuellement, en ajoutant ce qui suit à la variable option
:
selected
attribut, pour le rendre sélectionné par défautdisabled
, pour le rendre non sélectionnable par l'utilisateurdisplay: none
, pour le cacher de la liste de valeursselect > .placeholder {
display: none;
}
<select required>
<option class="placeholder" selected disabled value="">Select language</option>
<option>Option 1</option>
<option>Option 2</option>
</select>
Parce que vous ne pouvez pas utiliser d'attributs réservés pour les balises select
, je ne crois pas qu'il soit possible de faire exactement ce que vous demandez avec du HTML/CSS pur. Vous pouvez cependant faire quelque chose comme ceci:
<select>
<option disabled="disabled">Select language</option>
<option>Option 1</option>
</select>
"Select language" apparaîtra dans le menu déroulant, mais une fois qu'une autre option est sélectionnée, il ne sera pas possible de la resélectionner.
J'espère que ça aide.
Essaye ça:
<div class="selectSelection">
<select>
<option>Do not display</option>
<option>1</option>
<option>1</option>
</select>
</div>
En CSS:
.selectSelection option:first-child{
display:none;
}
J'ai une solution avec une étendue affichée au-dessus du select jusqu'à ce qu'une sélection soit effectuée. Le span affiche le message par défaut, il ne figure donc pas dans la liste des propositions:
HTML:
<span id="default_message_overlay">Default message</span>
<select id="my_select">
<option value="1">Option 1</option>
<option value="2">Option 2</option>
<option value="3">Option 3</option>
</select>
CSS:
#default_message_overlay {
position: absolute;
display: block;
width: 120px;
color: grey;
}
select {
width: 150px;
}
Javascript (avec JQuery):
$(document).ready(function() {
// No selection at start
$('#my_select').prop("selectedIndex", -1);
// Set the position of the overlay
var offset = $('#my_select').offset();
offset.top += 3;
offset.left += 3;
$('#default_message_overlay').offset(offset);
// Remove the overlay when selection changes
$('#my_select').change(function() {
if ($(this).prop("selectedIndex") != -1) {
$('#default_message_overlay').hide();
}
});
});
J'ai fait un jsfiddle pour demo . Testé avec Firefox et IE8.
<option value="" id="ddl" name="prop" style="display:none;" disabled selected>chose something </option>
vous pouvez bien sûr déplacer le fichier css vers un fichier css si vous le souhaitez et placer un script pour intercepter le bouton esc
afin de sélectionner à nouveau le mode désactivé. Contrairement aux autres réponses similaires que j'ai mises value=""
, il en est ainsi si vous envoyez la (les) valeur (s) de votre liste de sélection avec un formulaire, elle ne contiendra pas "chose choisie". Dans asp.net, mvc 5 envoyé sous forme de fichier json compilé avec var obj = { prop:$('#ddl').val(),...};
et JSON.stringify(obj);
, la valeur de prop sera nulle.
Op1:
$("#MySelectid option").each(function () {
if ($(this).html() == "text to find") {
$(this).attr("selected", "selected");
return;
}
});
Op2:
$('#MySelectid option')
.filter(function() { return $.trim( $(this).text() ) == 'text to find'; }).attr('selected','selected');