La solution de Kyle a parfaitement fonctionné pour moi, alors j'ai fait mes recherches afin d'éviter tout Js et CSS, mais en m'en tenant simplement au HTML. L'ajout d'une valeur de selected
à l'élément que nous voulons voir apparaître comme un en-tête le force à s'afficher en premier lieu comme un espace réservé. Quelque chose comme:
<option selected disabled>Choose here</option>
Le balisage complet doit être le long de ces lignes:
<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 œil à ce violon , et voici le résultat:
Si vous ne souhaitez pas que le type de texte d'espace réservé apparaisse dans les options une fois qu'un utilisateur clique sur la zone de sélection, ajoutez simplement l' hidden
attribut 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.
hidden
attribut , utilisé dans la réponse ci-dessus, est un attribut qui peut être défini sur n'importe quel élément HTML, et est généralement (mais pas nécessairement) implémenté pour être équivalent à un paramètredisplay: none
avec CSS.hidden
sur unoption
dans aselect
ne fonctionne pas dans Safari, sur iOS ou Mac. Cette réponse n'offre donc qu'une prise en charge partielle du navigateur.Voici la solution:
la source
selected="true"
n'est pas valide. Utilisez plutôtselected="selected"
en (X) HTML ou simplementselected
en HTML. Il semble que vous avez confondu l'selected
attribut avec laselected
propriété, qui est modifiée comme ceci:myOption.selected = true;
oumyOption.selected = false;
hidden
(qui est "généralement implémentée en CSS" en utilisant dedisplay: none
toute façon), utiliserdisplay: none
sur unoption
ne fonctionne pas dans Safari; l'option apparaît toujours.La manière appropriée et sémantique consiste à utiliser une option d'étiquette d'espace réservé :
option
élément en tant que premier enfant duselect
value
= ""
option
option
required
attribut auselect
Cela obligera l'utilisateur à sélectionner une autre option afin de pouvoir soumettre le formulaire, et les navigateurs doivent afficher le
option
comme souhaité:Cependant, la plupart des navigateurs le rendront normalement
option
. Nous devrons donc le réparer manuellement, en ajoutant ce qui suit auoption
:selected
attribut, pour le rendre sélectionné par défautdisabled
attribut, pour le rendre non sélectionnable par l'utilisateurdisplay: none
, pour le masquer de la liste des valeursla source
hidden
attribut à la balise d'option d'espace réservé au lieu dedisplay: none
car il semble que la plupart des navigateurs mobiles ignorent l'display: none
attribut CSS et c'est encore plus sémantiquement correct à mon avis.hidden
est généralement implémentée commedisplay: none
sous le capot (et la spécification le suggère explicitement comme une implémentation "typique"). En tant que tel, je serais surpris s'il y avait des navigateurs - mobiles ou autres -hidden
fonctionnant maisdisplay: none
pas. Pouvez-vous donner un exemple?Parce que vous ne pouvez pas utiliser d'attribuer des espaces réservés pour les
select
balises, je ne pense pas qu'il existe un moyen de faire exactement ce que vous demandez avec du HTML / CSS pur. Vous pouvez cependant faire quelque chose comme ceci:"Sélectionner la langue" apparaîtra dans la liste déroulante, mais une fois qu'une autre option est sélectionnée, il ne sera pas possible de la resélectionner.
J'espère que cela aide.
la source
Essaye ça:
Dans le CSS:
la source
J'ai une solution avec une plage affichée au-dessus de la sélection jusqu'à ce qu'une sélection soit effectuée. Le span affiche le message par défaut, et il n'est donc pas dans la liste des propositions:
HTML:
CSS:
Javascript (avec JQuery):
J'ai fait un jsfiddle pour une démo . Testé avec Firefox et IE8.
la source
span
là utiliserlegend
et ce serait parfait oulabel
pointer-events: none
sur votre étendue pour permettre aux clics de passer pour sélectionner.vous pouvez bien sûr déplacer le css vers un fichier css si vous le souhaitez, et mettre un script pour attraper le
esc
bouton pour sélectionner à nouveau le désactivé. Contrairement aux autres réponses similaires que j'ai misesvalue=""
, c'est le cas si vous envoyez la ou les valeurs de votre liste de sélection avec un formulaire, elle ne contiendra pas "a choisi quelque chose". Dans asp.net mvc 5 envoyé en tant que json compilé avecvar obj = { prop:$('#ddl').val(),...};
etJSON.stringify(obj);
la valeur de prop sera nulle.la source
Op1:
Op2:
la source