¿Cómo puedo establecer el valor predeterminado para un elemento HTML <select>?

1459

Pensé que agregar un "value"conjunto de atributos en el <select>elemento a continuación provocaría <option>que "value"se seleccionara el que contiene mi proporcionado por defecto:

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

Sin embargo, esto no funcionó como esperaba. ¿Cómo puedo establecer qué <option>elemento está seleccionado por defecto?

Jichao
fuente
Wow, esta pregunta es muy útil y literalmente se volvió viral jaja
finnmglas

Respuestas:

2152

Establezca selected="selected"la opción que desea que sea la predeterminada.

<option selected="selected">
3
</option>
Borealid
fuente
19
<option value = "3" selected = "selected"> 3 </option> El valor se pasaría como una cadena cuando se selecciona la opción 3.
Sree Rama
55
Y siga usando el atributo id para <Select> y no es bueno usar el atributo value para el elemento html <select>.
Sree Rama
216
La parte = "seleccionada" no es necesaria. Solo <opción seleccionada> hará lo mencionado en otras respuestas.
MindJuice
56
@MindJuice Lo que escribí es HTML / XML políglota válido. Usar <opción seleccionada> está bien para un navegador, pero puede hacer que el documento sea rechazado por otros analizadores. Me resulta útil poder usar XPath / XSLT en documentos web ocasionalmente.
Borealid el
70
Si está utilizando Angular, tenga en cuenta que ng-modelanula el valor predeterminado seleccionado (incluso como indefinido si no configuró el objeto vinculado). Me tomó un tiempo darme cuenta de por qué la selected="selected"opción no estaba seleccionada.
metakermit
626

En caso de que desee tener un texto predeterminado como una especie de marcador de posición / pista pero no se considere un valor válido (algo así como "complete aquí", "seleccione su nación", etc.) puede hacer algo como esto:

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

Nobita
fuente
61
Creo que esto es lo que la mayoría de la gente está buscando. Buena respuesta.
chrisallick
1
Era un jsfiddle externo donde solo se necesitaba el css para que no apareciera a lo largo del borde de la pantalla. Después de algunos meses, se editó en un fragmento de código en línea y el tipo que editó simplemente lo mantuvo en el ejemplo. Puede editarlo y eliminarlo del fragmento si realmente le molesta.
Nobita
Una solución aún mejor es utilizar el hiddenatributo en su lugar. Vea la respuesta de @ chong-lip-phang a continuación: stackoverflow.com/a/39358987/1192426
Ivan Akulov
<option value="" selected disabled hidden>Choose here</option>
1
Respuesta impresionante!
Japes Sophey
234

Ejemplo completo:

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

RedFilter
fuente
11
Eso es más simple que usar selected = "selected".
Rodrigo el
57
selected = "selected" debería funcionar para todos los doctypes. A XHTML no le gustan los atributos sin valores.
ps2goat
14
@ Rodrigo ¿Es realmente tan difícil de escribir selected="selected"? Quiero decir, ¿qué estás ahorrando? ¿Hora? ¿Talla? Es insignificante y si hace que el código sea más "compatible", ¿por qué no hacerlo ?
xDaizu
15
@ DanielParejoMuñoz, ok, es insignificante. Pero si mi doctype es html y no xhtml, ¿por qué desperdiciar algún byte?
Rodrigo
55
selected = "selected" parece un error. En un par de meses probablemente lo cambiaría a selected = "3" pensando que esto significa que el elemento 3 está seleccionado. (y rompe mi página)
Paul McCarthy
92

Encontré esta pregunta, pero la respuesta aceptada y altamente votada no funcionó para mí. Resulta que si está utilizando React, la configuración selectedno funciona.

En su lugar, debe establecer un valor en la <select>etiqueta directamente como se muestra a continuación:

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

Lea más sobre por qué aquí en la página Reaccionar .

MindJuice
fuente
2
Puede establecer una opción preseleccionada en una lista desplegable utilizando el valueatributo para la <select>etiqueta, es decir <select value="3">, pero no es válido en el validador W3C.
Apóstol
44
Correcto, pero esto no es HTML, es JSX, por lo que no necesita seguir las reglas del W3C. Sin embargo, el HTML generado por React al final es válido.
MindJuice
En un mundo perfecto, esto había sido un comentario a la pregunta, ya que no es una respuesta válida. Pero supongo que tiene suficiente valor para quedarse.
Justus Romijn
2
Necesitaba una solución similar a la sugerencia anterior, pero con JQuery en lugar de React. En caso de que ayude a alguien en el futuro:$("select").each(function(){ $(this).find('option[value="'+$(this).attr("value")+'"]').prop('selected', true); });
CDK
Esta respuesta no es válida, la pregunta subyacente es hablar sobre HTML no React (JSX).
Aaron C
72

Puedes hacerlo así:

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

Proporcione la palabra clave "seleccionada" dentro de la etiqueta de opción, que desea que aparezca de forma predeterminada en su lista desplegable.

O también puede proporcionar un atributo a la etiqueta de opción, es decir

<option selected="selected">3</option>
harmender
fuente
13
Para ser claros, el estándar w3 es <option selected = "selected"> 3 </option>
htmldrum
40
@JRM Creo que lo que quiere decir es que si su documento debe cumplir con XHTML, entonces un atributo debe tener un valor. En HTML no hay necesidad de "selected = selected". Los ejemplos en w3.org/wiki/HTML/Elements/select , developer.mozilla.org/en-US/docs/HTML/Element/select no especifican un valor. Lo importante a tener en cuenta es que selected="false"no está permitido y selected=""también lo hace seleccionado. La única forma de hacer una opción no seleccionada es eliminar el atributo. w3.org/html/wg/drafts/html/master/…
Juan Mendes
3
Nunca entiendo cómo se votan preguntas como esta. Son EXACTAMENTE como la respuesta correcta todavía ... 2 años después lol
Phil
51

si desea utilizar los valores de un formulario y mantenerlo dinámico, intente esto 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>
Florian
fuente
40

Prefiero esto:

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

'Elegir aquí' desaparece después de seleccionar una opción.

Chong Lip Phang
fuente
1
Intenté esto pero no se muestra "Elegir aquí". La primera opción está vacía
Bogdan Mates
¿Qué navegador estás usando?
Chong Lip Phang
Estoy usando la versión del navegador Google Chrome 52.0.2743.116 m
Bogdan Mates el
2
Estoy usando ese navegador también y no tengo ningún problema.
Chong Lip Phang
2
Considere agregar value=""para asegurarse de obtener un valor vacío.
Ryan Walton
31

Una mejora para la respuesta de nobita . También puede mejorar la vista visual de la lista desplegable, ocultando el elemento 'Elegir aquí'.

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

Salitha Prasad
fuente
25

La mejor manera en mi opinión:

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

¿Por qué no deshabilitado?

Cuando usa el atributo deshabilitado junto con el <button type="reset">Reset</button>valor no se restablece al marcador de posición original. En cambio, el navegador elige primero la opción no deshabilitada que puede causar errores de usuario.

Valor vacío predeterminado

Cada formulario de producción tiene validación, entonces el valor vacío no debería ser un problema. De esta manera, puede que tengamos vacío, no es necesario seleccionar.

Atributos de sintaxis XHTML

selected="selected"La sintaxis es la única forma de ser compatible con XHTML y HTML 5. Es una sintaxis XML correcta y algunos editores pueden estar contentos con esto. Es más compatible con versiones anteriores. No tengo sentimientos fuertes sobre esto, pero si los argumentos mencionados anteriormente son sus requisitos, debe seguir la sintaxis completa.

Michał Mielec
fuente
Eso oculta toda la opción para mí
ADEL NAMANI
@ADELNAMANI ¿Podría proporcionar el enlace a su código? Supongo que tu problema no está relacionado con mi respuesta.
Michał Mielec
19

Otro ejemplo; usando JavaScript para establecer una opción seleccionada.

(Podría usar este ejemplo para buclear una matriz de valores en un componente desplegable)

<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);
Aliado
fuente
¿No debería ser eso el.selected = "selected";para cumplir con el estándar w3?
7yl4r
55
@ 7yl4r No. selectedes una propiedad booleana definida por w3c - w3.org/TR/html401/interact/forms.html `17.6.1 Opciones preseleccionadas seleccionadas [CI] - Cuando se establece, este atributo booleano especifica que esta opción es preseleccionado.` Para obtener más información sobre el uso, consulte las escuelas w3c - w3schools.com/jsref/prop_option_selected.asp
Ally
14

El atributo seleccionado es un atributo booleano.

Cuando está presente, especifica que se debe preseleccionar una opción cuando se carga la página.

La opción preseleccionada se mostrará primero en la lista desplegable.

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

Si está en reacción, puede usarlo defaultValuecomo atributo en lugar de valueen la etiqueta de selección.

Johan
fuente
7

Si está usando select con angular 1, entonces necesita usar ng-init, de lo contrario, la segunda opción no se seleccionará ya que ng-model anula el valor predeterminado seleccionado

<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>
Akshay Vijay Jain
fuente
4

Usé esta función php para generar las opciones e insertarla en mi 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;
  }

?>

Y luego, en el código de mi página web, lo uso como a continuación;

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

Si $ endmin se crea a partir de una variable _POST cada vez que se carga la página (y este código está dentro de un formulario que se publica), el valor seleccionado previamente se selecciona de forma predeterminada.

Graeme
fuente
4

Falta el atributo de valor de la etiqueta, por lo que no se muestra como se ha seleccionado. Por defecto, la primera opción se muestra en la carga de la página desplegable, si el atributo de valor está configurado en la etiqueta ... Resolví mi problema de esta manera

X-Coder
fuente
4

Este código establece el valor predeterminado para el elemento de selección 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>
Julian
fuente
3

Puedes usar:

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

en vez de,

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

Ambos son igualmente correctos.

Sam
fuente
3

Simplemente haría que el valor de la primera opción de selección sea el predeterminado y simplemente oculte ese valor en el menú desplegable con la nueva función "oculta" de HTML5. Me gusta esto:

   <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>
Ahmedakhtar11
fuente
2

Yo mismo 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>
Юрий Светлов
fuente
2

Solo necesita poner el atributo "seleccionado" en una opción particular, en lugar de dirigirlo directamente al elemento seleccionado.

Aquí hay un fragmento para el mismo ejemplo de trabajo múltiple con valores diferentes.

   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>

Ambuj Khanna
fuente
2

Establecer seleccionado = "seleccionado" donde el valor de la opción es 3

por favor vea el siguiente ejemplo

<option selected="selected" value="3" >3</option>
Akbor
fuente
En Firefox, no funcionará en la recarga de la página
Sebastian
en mi sistema funciona en firefox
Akbor
1

El problema <select>es que a veces se desconecta con el estado de lo que se procesa actualmente y, a menos que algo haya cambiado en la lista de opciones, no se devuelve ningún valor de cambio. Esto puede ser un problema al intentar seleccionar la primera opción de una lista. El siguiente código puede obtener la primera opción seleccionada onchange="changeFontSize(this)"por primera vez, pero por sí misma no lo haría. Existen métodos descritos anteriormente que utilizan una opción ficticia para obligar a un usuario a realizar un cambio de valor para recoger el primer valor real, como comenzar la lista con un valor vacío. Nota: onclick llamaría a la función dos veces, el siguiente código no lo hace, pero resuelve el problema por primera vez.

<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>
Jim
fuente
1

Uso Angular y configuro la opción predeterminada por

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

Guión:

sselectedVal:any="test1";
upog
fuente
0

Así es como lo hice ...

<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>
AlexM
fuente
44
Parece haber cierta incongruencia en esta solución. Si el nombre del elemento es "select", ¿no debería ser la clave variable $ _POST "select"? ¿De dónde viene "drop_down"? Además, suponiendo que se trata de un error, y esto realmente está verificando la variable $ _POST ['select'] para un valor, cualquier valor no vacío devolverá verdadero, y por lo tanto todos los elementos de <option> se marcarán como "seleccionados". ¿Tal vez me estoy perdiendo algo integral en esta respuesta?
Ryan
0

Puedes intentarlo así

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

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

Fragmento de JavaScript nativo:

document.querySelectorAll('[data-selected]').forEach(e => {
   e.value = e.dataset.selected
});
Mwspace LLC
fuente
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>
acceso permitido
fuente