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?


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.

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/ .


@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.


25
<select>
     <option value="" style="display:none;"></option>
     <option value="0">aaaa</option>
     <option value="1">bbbb</option>
  </select>

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.


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.


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.


0

Vous pouvez essayer cet extrait

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

Cela a fonctionné pour moi.


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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.