SELEZIONA HTML vuoto senza elemento vuoto nell'elenco a discesa


110

Come implementare subj?

quando scrivo:

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

l'elemento selezionato predefinito è "aaaa"

quando scrivo:

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

quindi l'elemento selezionato per impostazione predefinita è vuoto, ma questo elemento vuoto viene visualizzato nell'elenco a discesa.

come posso implementare il tag SELECT con un valore vuoto predefinito nascosto nell'elenco a discesa?


Risposte:


182

Usa solo attributi disabilitati e / o nascosti:

<option selected disabled hidden style='display: none' value=''></option>
  • selected rende questa opzione quella predefinita.
  • disabled rende questa opzione non cliccabile.
  • style='display: none'rende questa opzione non visualizzata nei browser meno recenti. Vedere: Posso usare la documentazione per l'attributo nascosto.
  • hidden fa in modo che questa opzione non venga visualizzata nell'elenco a discesa.

3
In realtà IE 11 mostra l'opzione "nascosto".
Edward Olamisan

6
Webkit non sembra supportare l'attributo "nascosto"
Ethan Reesor

2
Come accennato in Posso usare , l' hiddenattributo è efficace display: none, quindi per supportare i browser meno recenti:<option selected disabled hidden style='display: none' value=''></option>
Neta

66

Puoi impostando selectedIndexl' -1utilizzo .prop: http://jsfiddle.net/R9auG/ .

Per le versioni precedenti di jQuery utilizzare .attrinvece di .prop: http://jsfiddle.net/R9auG/71/ .


@IronicMuffin: Grazie; appena testato e sembra funzionare su tutti i browser tradizionali.
pimvdb

@zobidafly: grazie per l'editing; Ho elaborato un po '.
pimvdb

1
.attrfallirà nelle nuove versioni di jQuery. Cercare di essere intelligente mi ha fatto fallire.
Carson Ip

33

Semplicemente usando

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

funzionerà ovunque senza script e ti consentirà di istruire l'utente allo stesso tempo.


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 - non ok puoi testarlo qui (con o senza js): jsfiddle.net/R9auG/145 quindi consiglio js-approach di @pimvdb
tibalt

11

Ecco un modo semplice per farlo utilizzando JavaScript normale. Questo è l'equivalente vaniglia dello script jQuery pubblicato da pimvdb. Puoi provarlo qui .

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

Assicurati che "id_here" corrisponda nel modulo e in JavaScript.


3

Non puoi. Semplicemente non funzionano in questo modo. Un menu a discesa deve avere sempre selezionata una delle sue opzioni.

Potresti (anche se non lo consiglio) guardare un evento di modifica e quindi utilizzare JS per eliminare la prima opzione se è vuota.


3
Perché non consigli questo comportamento?
Josh Noe

Ci sono molti casi in cui desideri che l'utente scelga attivamente qualcosa da un elenco. Non penso che JS sia il modo più ottimale per farlo (anche se sembra essere l'unico modo), ma penso davvero che dovrebbe esserci un modo.
qwerty

2

Per puramente html @isherwood ha un'ottima soluzione. Per jQuery, dai un ID al menu a discesa di selezione, quindi selezionalo con jQuery:

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

Quindi utilizzare questo jQuery per cancellare il menu a discesa al caricamento della pagina:

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

Oppure inseriscilo all'interno di una funzione a sé stante:

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

realizza ciò che stai cercando ed è facile inserirlo in funzioni che potrebbero essere chiamate sulla tua pagina se hai bisogno di cancellare il menu a discesa senza ricaricare la pagina.


0

Puoi provare questo snippet

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

Ha funzionato per me.


1
Sarebbe meglio fornire un jsfiddle.net per accompagnare la risposta al fine di fornire una spiegazione più chiara.
Anonimo

1
Ciò presuppone che l'OP stia utilizzando jQuery.
evanrmurphy
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.