SELECT HTML vierge sans élément vide dans la liste déroulante

110

Comment implémenter subj?

quand j'écris:

<form>
  <select>
     <option value="0">aaaa</option>
     <option value="1">bbbb</option>
  </select>
</form>

alors l'élément sélectionné par défaut est "aaaa"

quand j'écris:

<form>
  <select>
     <option value=""></option>
     <option value="0">aaaa</option>
     <option value="1">bbbb</option>
  </select>
</form>

alors l'élément sélectionné par défaut est vide, mais cet élément vide se présente dans la liste déroulante.

Comment puis-je implémenter la balise SELECT avec une valeur vide par défaut masquée dans la liste déroulante?

Nick Stavroguine
la source
Copie

Réponses:

182

Utilisez simplement des attributs désactivés et / ou masqués:

<option selected disabled hidden style='display: none' value=''></option>
  • selected fait de cette option celle par défaut.
  • disabled rend cette option non cliquable.
  • style='display: none'rend cette option non affichée dans les anciens navigateurs. Voir: Puis-je utiliser la documentation pour l'attribut masqué.
  • hidden fait que cette option ne soit pas affichée dans la liste déroulante.
Eduardo
la source
3
En fait, IE 11 affiche l'option "caché".
Edward Olamisan
6
Webkit ne semble pas prendre en charge l'attribut `` caché ''
Ethan Reesor
2
Comme mentionné dans Puis-je utiliser , l' hiddenattribut est effectivement display: none, donc pour prendre en charge les navigateurs plus anciens:<option selected disabled hidden style='display: none' value=''></option>
Neta
66

Vous pouvez par le réglage selectedIndexà l' -1aide .prop: http://jsfiddle.net/R9auG/ .

Pour les anciennes versions de jQuery, utilisez à la .attrplace de .prop: http://jsfiddle.net/R9auG/71/ .

pimvdb
la source
@IronicMuffin: Merci; vient de tester et semble fonctionner sur tous les navigateurs grand public en fait.
pimvdb
@zobidafly: Merci d'avoir édité; J'ai élaboré un peu.
pimvdb
1
.attréchouera dans les nouvelles versions de jQuery. Essayer d'être intelligent m'a fait échouer.
Carson Ip
33

Utiliser simplement

<option value="" selected disabled>Please select an option...</option>

fonctionnera n'importe où sans script et vous permettra d'instruire l'utilisateur en même temps.

mvreijn
la source
25
<select>
     <option value="" style="display:none;"></option>
     <option value="0">aaaa</option>
     <option value="1">bbbb</option>
  </select>
Andrey R
la source
1
ff / chrome - ok, opera / ie7-9 - pas ok, vous pouvez le tester ici (avec ou sans js): jsfiddle.net/R9auG/145 donc je recommande js-approach par @pimvdb
tibalt
11

Voici un moyen simple de le faire en utilisant du JavaScript brut. C'est l'équivalent vanille du script jQuery posté par pimvdb. Vous pouvez le tester ici .

<script type='text/javascript'>
  window.onload = function(){
    document.getElementById('id_here').selectedIndex = -1;
  }
</script>

.

<select id="id_here">
  <option>aaaa</option>
  <option>bbbb</option>
</select>

Assurez-vous que le "id_here" correspond au formulaire et au JavaScript.

Mingwei Samuel
la source
3

Vous ne pouvez pas. Ils ne fonctionnent tout simplement pas de cette façon. Un menu déroulant doit avoir l'une de ses options sélectionnée à tout moment.

Vous pouvez (bien que je ne le recommande pas) surveiller un événement de modification , puis utiliser JS pour supprimer la première option si elle est vide.

Quentin
la source
3
Pourquoi ne recommandez-vous pas ce comportement?
Josh Noe
Il existe de nombreux cas où vous souhaitez que l'utilisateur sélectionne activement quelque chose dans une liste. Je ne pense pas que JS soit la manière la plus optimale de le faire (bien que cela semble être le seul moyen), mais je pense vraiment qu'il devrait y avoir un moyen.
qwerty
2

Pour purement HTML, @isherwood a une excellente solution. Pour jQuery, donnez à votre liste déroulante un identifiant, puis sélectionnez-le avec jQuery:

<form>
  <select id="myDropDown">
    <option value="0">aaaa</option>
    <option value="1">bbbb</option>
  </select>
</form> 

Ensuite, utilisez ce jQuery pour effacer la liste déroulante lors du chargement de la page:

$(document).ready(function() {
    $('#myDropDown').val(''); 
});

Ou mettez-le dans une fonction par lui-même:

$('#myDropDown').val(''); 

accomplit ce que vous recherchez et il est facile de mettre cela dans des fonctions qui peuvent être appelées sur votre page si vous avez besoin de vider la liste déroulante sans recharger la page.

Jason Slobotski
la source
0

Vous pouvez essayer cet extrait

$("#your-id")[0].selectedIndex = -1

Cela a fonctionné pour moi.

Shenbag
la source
1
Il serait préférable de fournir un jsfiddle.net pour accompagner la réponse afin de fournir une explication plus claire.
Anonyme le
1
Cela suppose que l'OP utilise jQuery.
evanrmurphy