Come posso impostare il valore predefinito per un elemento HTML <select>?


1459

Ho pensato che l'aggiunta di un "value"set di attributi <select>sull'elemento seguente avrebbe fatto sì che il <option>contenuto di my fornito "value"fosse selezionato per impostazione predefinita:

<select name="hall" id="hall" value="3">
  <option>1</option>
  <option>2</option>
  <option>3</option>
  <option>4</option>
  <option>5</option>
</select>

Tuttavia, questo non ha funzionato come mi aspettavo. Come posso impostare quale <option>elemento è selezionato per impostazione predefinita?


Wow, questa domanda è così utile e letteralmente è diventata virale ahah
finnmglas

Risposte:


2152

Impostare selected="selected"per l'opzione che si desidera essere predefinita.

<option selected="selected">
3
</option>

19
<option value = "3" selected = "selected"> 3 </option> Il valore verrebbe passato come stringa quando l'opzione 3 è selezionata.
Sree Rama,

5
E continua a usare l'attributo id per <Select> e non è bene usare l'attributo value per l'elemento html <select>.
Sree Rama,

216
La parte = "selezionata" non è necessaria. Solo <opzione selezionata> farà come indicato nelle altre risposte.
MindJuice,

56
@MindJuice Quello che ho scritto è poliglotta HTML / XML valida. L'uso di <opzione selezionata> va bene per un browser, ma può causare il rifiuto del documento da parte di altri parser. Trovo utile poter utilizzare XPath / XSLT su documenti Web di tanto in tanto.
Boreale

70
Se si utilizza Angular, tenere presente che ng-modelignora il valore predefinito selezionato (anche se non definito se non è stato impostato l'oggetto associato). Mi ci è voluto un po 'per capire che era per questo che l' selected="selected"opzione non era selezionata.
metakermit,

626

Se vuoi avere un testo predefinito come una sorta di segnaposto / suggerimento ma non considerato un valore valido (qualcosa come "completa qui", "seleziona la tua nazione" ecc.) Puoi fare qualcosa del genere:

<select>
  <option value="" 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>


61
Penso che questo sia ciò che la maggior parte delle persone sta cercando. Buona risposta.
chrisallick,

1
Era un jsfiddle esterno in cui il CSS non era necessario per farlo apparire lungo il bordo dello schermo. Dopo alcuni mesi è stato modificato in uno snippet di codice incorporato e il tizio che ha modificato lo ha semplicemente tenuto nell'esempio. Puoi modificarlo e rimuoverlo dallo snippet se ti disturba davvero.
Nobita,

Una soluzione ancora migliore è utilizzare hiddeninvece l' attributo. Vedere @ risposta di chong-lip-Phang qui di seguito: stackoverflow.com/a/39358987/1192426
Ivan Akulov

<option value="" selected disabled hidden>Choose here</option>

1
Risposta fantastica!
japes Sophey,

234

Esempio completo:

<select name="hall" id="hall"> 
  <option> 
    1 
  </option> 
  <option> 
    2 
  </option> 
  <option selected> 
    3 
  </option> 
  <option> 
    4 
  </option> 
  <option> 
    5 
  </option> 
</select> 


11
È più semplice dell'uso selected = "selected".
Rodrigo,

57
selected = "selected" dovrebbe funzionare per tutti i tipi di documento. XHTML non ama gli attributi senza valori.
ps2goat,

14
@Rodrigo È davvero così difficile scrivere selected="selected"? Voglio dire, cosa stai risparmiando? Tempo? Dimensione? È trascurabile e se rende il codice più "conforme", perché non farlo ?
xDaizu,

15
@ DanielParejoMuñoz, ok, è trascurabile. Ma se il mio doctype è html e non xhtml, perché sprecare qualsiasi byte?
Rodrigo,

5
selected = "selected" sembra un errore. In un paio di mesi probabilmente lo cambierei in selected = "3" pensando che questo significa che l'elemento 3 è selezionato. (e spezza la mia pagina)
Paul McCarthy,

92

Mi sono imbattuto in questa domanda, ma la risposta accettata e altamente votata non ha funzionato per me. Si scopre che se si utilizza React, l'impostazione selectednon funziona.

Invece devi impostare un valore nel <select>tag direttamente come mostrato di seguito:

<select value="B">
  <option value="A">Apple</option>
  <option value="B">Banana</option>
  <option value="C">Cranberry</option>
</select>

Leggi di più sul perché qui nella pagina React .


2
È possibile impostare un'opzione preselezionata in un elenco a discesa utilizzando l' valueattributo per il <select>tag, ovvero <select value="3">, ma non è valido nel validatore W3C.
Apostolo,

4
Giusto, ma questo non è HTML, è JSX, quindi non ha bisogno di seguire le regole del W3C. L'HTML generato da React alla fine è valido però.
MindJuice,

In un mondo perfetto questo è stato un commento alla domanda, in quanto non è una risposta valida. Ma immagino che abbia abbastanza valore per restare.
Justus Romijn il

2
Avevo bisogno di una soluzione simile al suggerimento sopra, ma con JQuery invece di React. Nel caso in cui aiuti qualcuno in futuro:$("select").each(function(){ $(this).find('option[value="'+$(this).attr("value")+'"]').prop('selected', true); });
CDK,

Questa risposta non è valida, la domanda di fondo parla di HTML non React (JSX).
Aaron C,

72

Puoi farlo in questo modo:

<select name="hall" id="hall">
    <option> 1 </option>
    <option> 2 </option>
    <option selected> 3 </option>
    <option> 4 </option>
    <option> 5 </option>
</select> 

Fornire la parola chiave "selezionata" all'interno del tag opzione, che si desidera visualizzare per impostazione predefinita nell'elenco a discesa.

Oppure puoi anche fornire un attributo al tag opzione, ad es

<option selected="selected">3</option>

13
Giusto per essere chiari, lo standard w3 è <opzione selezionata = "selezionata"> 3 </option>
htmldrum

40
@JRM Penso che intendi dire che se il tuo documento è conforme XHTML di un attributo deve avere un valore. In HTML non è necessario "selezionato = selezionato". Gli esempi su w3.org/wiki/HTML/Elements/select , developer.mozilla.org/en-US/docs/HTML/Element/select non specificano un valore. La cosa importante da notare è che selected="false"non è consentito e selected=""lo rende anche selezionato. L'unico modo per rendere un'opzione non selezionata è rimuovere l'attributo. w3.org/html/wg/drafts/html/master/…
Juan Mendes,

3
Non capisco mai come domande come questa vengano mai votate. Sono esattamente come la risposta corretta ancora .. 2 anni dopo lol
Phil

51

se vuoi usare i valori di un modulo e mantenerlo dinamico prova questo con php

<form action="../<SamePage>/" method="post">


<?php
    $selected = $_POST['select'];
?>

<select name="select" size="1">

  <option <?php if($selected == '1'){echo("selected");}?>>1</option>
  <option <?php if($selected == '2'){echo("selected");}?>>2</option>

</select>
</form>

40

Preferisco questo:

<select>
   <option selected 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>

'Scegli qui' scompare dopo che è stata selezionata un'opzione.


1
Ho provato questo, ma "Scegli qui" non viene visualizzato. La prima opzione è vuota
Bogdan Mates

Quale browser utilizzate?
Chong Lip Phang,

Sto usando la versione del browser Google Chrome 52.0.2743.116 m
Bogdan si

2
Sto usando anche quel browser e non sto riscontrando alcun problema.
Chong Lip Phang,

2
Valuta di aggiungere value=""per assicurarti di ottenere un valore vuoto.
Ryan Walton,

31

Un miglioramento per la risposta di nobita . Inoltre puoi migliorare la vista visiva dell'elenco a discesa, nascondendo l'elemento 'Scegli qui'.

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


25

Il modo migliore secondo me:

<select>
   <option value="" selected="selected" hidden="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>

Perché non disabilitato?

Quando si utilizza l'attributo disabilitato insieme al <button type="reset">Reset</button>valore non viene ripristinato il segnaposto originale. Invece il browser sceglie prima l'opzione non disabilitata che può causare errori dell'utente.

Valore vuoto predefinito

Ogni modulo di produzione ha una convalida, quindi il valore vuoto non dovrebbe essere un problema. In questo modo potremmo avere vuoto non richiesto selezionare.

Attributi della sintassi XHTML

selected="selected"La sintassi è l'unico modo per essere compatibile con XHTML e HTML 5. È la sintassi XML corretta e alcuni editor potrebbero esserne contenti. È più compatibile con le versioni precedenti. Non ho un forte sentimento al riguardo, ma se i suddetti argomenti sono i tuoi requisiti, dovresti seguire la sintassi completa.


Ciò nasconde l'intera opzione per me
ADEL NAMANI il

@ADELNAMANI Potresti fornire il link al tuo codice? Immagino che il tuo problema non sia correlato alla mia risposta.
Michał Mielec,

19

Un altro esempio; utilizzando JavaScript per impostare un'opzione selezionata.

(È possibile utilizzare questo esempio per eseguire il ciclo di una matrice di valori in un componente a discesa)

<select id="yourDropDownElementId"><select/>

// Get the select element
var select = document.getElementById("yourDropDownElementId");
// Create a new option element
var el = document.createElement("option");
// Add our value to the option
el.textContent = "Example Value";
el.value = "Example Value";
// Set the option to selected
el.selected = true;
// Add the new option element to the select element
select.appendChild(el);

non dovrebbe essere el.selected = "selected";conforme allo standard w3?
7yl4r,

5
@ 7yl4r No. selectedè una proprietà booleana come definita da w3c - w3.org/TR/html401/interact/forms.html `17.6.1 Opzioni preselezionate selezionate [CI] - Se impostato, questo attributo booleano specifica che questa opzione è preselezionato. Per ulteriori informazioni sull'uso, consultare w3c Schools
Ally,

14

L' attributo selezionato è un attributo booleano.

Se presente, specifica che un'opzione deve essere preselezionata al caricamento della pagina.

L'opzione preselezionata verrà visualizzata per prima nell'elenco a discesa.

<select>
  <option value="volvo">Volvo</option>
 <option value="saab">Saab</option>
 <option value="vw">VW</option>
 <option value="audi" selected>Audi</option> 
</select> 

10

Se sei in reazione puoi usare defaultValuecome attributo invece che valuenel tag select.


7

Se si utilizza select con l'angolo 1, è necessario utilizzare ng-init, altrimenti la seconda opzione non verrà selezionata poiché ng-model sovrascrive il valore predefinito defaul

<select ng-model="sortVar" ng-init='sortVar="stargazers_count"'>
  <option value="name">Name</option>
  <option selected="selected" value="stargazers_count">Stars</option>
  <option value="language">Language</option>
</select>

4

Ho usato questa funzione php per generare le opzioni e inserirla nel mio HTML

<?php
  # code to output a set of options for a numeric drop down list
  # parameters: (start, end, step, format, default)
  function numericoptions($start, $end, $step, $formatstring, $default)
  {
    $retstring = "";
    for($i = $start; $i <= $end; $i = $i + $step)
    {
      $retstring = $retstring . '<OPTION ';
      $retstring = $retstring . 'value="' . sprintf($formatstring,$i) . '"';
      if($default == $i)
      {
        $retstring = $retstring . ' selected="selected"';
      }
      $retstring = $retstring . '>' . sprintf($formatstring,$i) . '</OPTION> ';
    }

  return $retstring;
  }

?>

E poi nel mio codice della pagina web lo uso come di seguito;

<select id="endmin" name="endmin">
  <?php echo numericoptions(0,55,5,'%02d',$endmin); ?>
</select>

Se $ endmin viene creato da una variabile _POST ogni volta che la pagina viene caricata (e questo codice è all'interno di un modulo che pubblica), il valore selezionato in precedenza viene selezionato per impostazione predefinita.


4

manca l'attributo value del tag, quindi non viene visualizzato come desiderato selezionato. Per impostazione predefinita, la prima opzione mostra al caricamento della pagina a discesa, se l'attributo value è impostato sul tag .... Ho risolto il mio problema in questo modo


4

Questo codice imposta il valore predefinito per l'elemento di selezione HTML con PHP.

<select name="hall" id="hall">
<?php
    $default = 3;
    $nr = 1;
    while($nr < 10){
        if($nr == $default){
            echo "<option selected=\"selected\">". $nr ."</option>";
        }
        else{
            echo "<option>". $nr ."</option>";
        }
        $nr++;
    }
?>
</select>

3

Puoi usare:

<option value="someValue" selected>Some Value</option>

invece di,

<option value="someValue" selected = "selected">Some Value</option>

entrambi sono ugualmente corretti.


3

Vorrei semplicemente impostare come valore predefinito la prima opzione di selezione e nascondere quel valore nel menu a discesa con la nuova funzione "nascosta" di HTML5. Come questo:

   <select name="" id="">
     <option hidden value="default">Select An Option</option>
     <option value="1">One</option>
     <option value="2">Two</option>
     <option value="3">Three</option>
     <option value="4">Four</option>
   </select>

2

Io stesso lo uso

<select selected=''>
    <option value=''></option>
    <option value='1'>ccc</option>
    <option value='2'>xxx</option>
    <option value='3'>zzz</option>
    <option value='4'>aaa</option>
    <option value='5'>qqq</option>
    <option value='6'>wwww</option>
</select>

2

Hai solo bisogno di mettere l'attributo "selezionato" su una particolare opzione invece direttamente per selezionare l'elemento.

Ecco lo snippet per lo stesso esempio di lavoro multiplo con valori diversi.

   Select Option 3 :- 
   <select name="hall" id="hall">
    <option>1</option>
    <option>2</option>
    <option selected="selected">3</option>
    <option>4</option>
    <option>5</option>
   </select>
   
   <br/>
   <br/>
   <br/>
   Select Option 5 :- 
   <select name="hall" id="hall">
    <option>1</option>
    <option>2</option>
    <option>3</option>
    <option>4</option>
    <option selected="selected">5</option>
   </select>
   
    <br/>
   <br/>
   <br/>
   Select Option 2 :- 
   <select name="hall" id="hall">
    <option>1</option>
    <option selected="selected">2</option>
    <option>3</option>
    <option>4</option>
    <option>5</option>
   </select>


2

Imposta selezionato = "selezionato" dove il valore dell'opzione è 3

vedere l'esempio seguente

<option selected="selected" value="3" >3</option>

Su Firefox, non funzionerà al ricaricamento della pagina
Sebastian

sul mio sistema funziona su Firefox
Akbor il

1

Il problema <select>è che a volte è disconnesso dallo stato di ciò che è attualmente visualizzato e, a meno che qualcosa non sia cambiato nell'elenco delle opzioni, non viene restituito alcun valore di modifica. Questo può essere un problema quando si tenta di selezionare la prima opzione da un elenco. Il codice seguente può ottenere la prima opzione la prima volta selezionata, ma onchange="changeFontSize(this)"da sola non lo farebbe. Esistono metodi sopra descritti che utilizzano un'opzione fittizia per forzare un utente ad apportare un valore di modifica per prelevare il primo valore effettivo, come l'avvio dell'elenco con un valore vuoto. Nota: onclick chiamerebbe la funzione due volte, il seguente codice no, ma risolve il problema per la prima volta.

<label>Font Size</label>
<select name="fontSize" id="fontSize" onfocus="changeFontSize(this)" onchange="changeFontSize(this)">           
    <option value="small">Small</option>
    <option value="medium">Medium</option>
    <option value="large">Large</option>
    <option value="extraLarge">Extra large</option>
</select>

<script>
function changeFontSize(x){
    body=document.getElementById('body');
    if (x.value=="extraLarge") {
        body.style.fontSize="25px";
    } else {
        body.style.fontSize=x.value;
    }
}
</script>

1

Uso Angular e imposto l'opzione predefinita da

Modello HTML

<select #selectConnection [(ngModel)]="selectedVal" class="form-control  col-sm-6 "  max-width="100px"   title="Select" 
      data-size="10"> 
        <option  >test1</option>
        <option >test2</option>      
      </select>

script:

sselectedVal:any="test1";

0

Ecco come l'ho fatto ...

<form action="../<SamePage>/" method="post">

<?php
    if ( $_POST['drop_down'] == "")
    {
    $selected = "";
    }
    else
    {
    $selected = "selected";
    }
?>

<select name="select" size="1">

  <option value="1" <?php $selected ?>>One</option>
     ////////  OR  ////////
  <option value="2" $selected>Two</option>

</select>
</form>

4
Sembra esserci qualche incongruenza in questa soluzione. Se il nome dell'elemento è "select", la chiave della variabile $ _POST non dovrebbe essere "select" - da dove proviene "drop_down"? Inoltre, supponendo che si sia trattato di un errore, e questo sta effettivamente controllando la variabile $ _POST ['select'] per un valore, qualsiasi valore non vuoto restituirà true, e quindi tutti gli elementi <option> saranno contrassegnati come "selezionati". Forse mi manca qualcosa di integrale in questa risposta?
Ryan,

0

Puoi provare così

  <select name="hall" id="hall">
      <option>1</option>
      <option>2</option>
      <option selected="selected">3</option>
      <option>4</option>
      <option>5</option>
    </select>

0

Snippet HTML:

<select data-selected="public" class="form-control" name="role">
    <option value="public">
        Pubblica
    </option>
    <option value="user">
        Utenti
    </option>
    <option value="admin">
        Admin
    </option>
</select>

Snippet JavaScript nativo:

document.querySelectorAll('[data-selected]').forEach(e => {
   e.value = e.dataset.selected
});

0
Upstream System:
<select name=upstream id=upstream>
<option value="SYBASE">SYBASE ASE
<option value="SYBASE_IQ">SYBASE_IQ
<option value="SQLSERVER">SQLSERVER
</select>
<script>
var obj=document.getElementById("upstream");
for (var i=0;i<obj.length;i++){if(obj.options[i].value==="SYBASE_IQ")obj.selectedIndex=i;}
</script>
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.