Как установить значение по умолчанию для элемента HTML <select>?

1460

Я думал, что добавление "value"атрибута, установленного в <select>элементе ниже, приведет к тому, что <option>содержащее мое "value"будет выбрано по умолчанию:

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

Однако это не сработало, как я ожидал. Как я могу установить, какой <option>элемент выбран по умолчанию?

Jichao
источник
Вау, этот вопрос так полезен, и он буквально перешел в вирусный ха-ха
finnmglas

Ответы:

2153

Установите selected="selected"для параметра, который вы хотите использовать по умолчанию.

<option selected="selected">
3
</option>
Borealid
источник
19
<option value = "3" selected = "selected"> 3 </ option> Значение будет передано в виде строки, если выбрана опция 3.
Шри Рама
5
Продолжайте использовать атрибут id для <Select>, и не рекомендуется использовать атрибут value для элемента <select> html.
Шри Рама
216
= Выбранная часть не обязательна. Просто <опция выбрана> будет делать, как указано в других ответах.
MindJuice
56
@MindJuice То, что я написал, является действительным полиглотом HTML / XML. Использование <option selected> нормально для браузера, но может привести к отклонению документа другими анализаторами. Я считаю, что иногда можно использовать XPath / XSLT для веб-документов.
Бореалид
70
Если вы используете Angular, обратите внимание, что он ng-modelпереопределяет выбранное по умолчанию значение (даже как неопределенное, если вы не установили связанный объект). Мне понадобилось время, чтобы понять, почему этот selected="selected"вариант не был выбран.
metakermit
626

Если вы хотите, чтобы текст по умолчанию использовался как заполнитель / подсказка, но не считался допустимым значением (что-то вроде «завершить здесь», «выберите свою страну» и т. Д.), Вы можете сделать что-то вроде этого:

<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
источник
61
Я думаю, это то, что ищет большинство людей. Хороший ответ.
chrisallick
1
Это был внешний jsfiddle, где css просто необходим, чтобы он не появлялся вдоль границы экрана. Через несколько месяцев он был отредактирован до фрагмента встроенного кода, и парень, который редактировал, просто сохранил его в примере. Вы можете редактировать и удалять его из фрагмента, если он действительно вас беспокоит.
Нобита
Еще лучшим решением является использование hiddenатрибута. См. Ответ @ chong-lip-phang ниже: stackoverflow.com/a/39358987/1192426
Иван Акулов
<option value="" selected disabled hidden>Choose here</option>
1
Отличный ответ!
Японская Софи
234

Полный пример:

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

RedFilter
источник
11
Это проще, чем использовать selected = "selected".
Родриго
57
selected = "selected" должно работать для всех типов документов. XHTML не любит атрибуты без значений.
ps2goat
14
@Rodrigo Неужели так сложно написать selected="selected"? Я имею в виду, что вы экономите? Время? Размер? Это незначительно, и если это делает код более "совместимым", почему бы не сделать это ?
xDaizu
15
@ DanielParejoMuñoz, ничего страшного. Но если мой тип документа html, а не xhtml, зачем вообще тратить впустую любой байт?
Родриго
5
selected = "selected" выглядит как ошибка. Через пару месяцев я бы, вероятно, изменил его на selected = "3", думая, что это означает, что пункт 3 выбран. (и разбить мою страницу)
Пол Маккарти
92

Я сталкивался с этим вопросом, но принятый и высоко оцененный ответ не работал для меня. Оказывается, если вы используете React, то настройка selectedне работает.

Вместо этого вы должны установить значение в <select>теге напрямую, как показано ниже:

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

Узнайте больше о причинах здесь на странице React .

MindJuice
источник
2
Вы можете установить предварительно выбранный параметр в раскрывающемся списке, используя valueатрибут для <select>тега, т. <select value="3">Е. Он недействителен в валидаторе W3C.
Апостол
4
Да, но это не HTML, это JSX, поэтому он не должен следовать правилам W3C. HTML, сгенерированный React, в конце концов, действителен.
MindJuice
В идеальном мире это был комментарий к вопросу, поскольку он не является правильным ответом. Но я предполагаю, что это имеет достаточно значения, чтобы остаться.
Юстус Ромейн
2
Мне нужно было решение, подобное приведенному выше, но с JQuery вместо React. На случай, если это кому-нибудь поможет в будущем:$("select").each(function(){ $(this).find('option[value="'+$(this).attr("value")+'"]').prop('selected', true); });
CDK
Этот ответ недействителен, основной вопрос говорит о HTML, а не React (JSX).
Аарон С
72

Вы можете сделать это так:

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

Укажите ключевое слово «selected» внутри тега option, который по умолчанию должен отображаться в раскрывающемся списке.

Или вы также можете предоставить атрибут для тега option, т.е.

<option selected="selected">3</option>
harmender
источник
13
Просто чтобы прояснить, стандарт w3 - это <option selected = "selected"> 3 </ option>
htmldrum
40
@JRM Я думаю, что вы имеете в виду, что если ваш документ должен быть совместимым с XHTML, то атрибут должен иметь значение. В HTML нет необходимости "selected = selected". В примерах на w3.org/wiki/HTML/Elements/select , developer.mozilla.org/en-US/docs/HTML/Element/select не указывается значение. Важно отметить, что selected="false"это не разрешено, а selected=""также делает его выбранным. Единственный способ сделать опции не выбранными - это удалить атрибут. w3.org/html/wg/drafts/html/master/…
Хуан Мендес
3
Я никогда не понимаю, как подобные вопросы когда-либо поднимаются. Они точно так же, как правильный ответ еще .. 2 года спустя LOL
Фил
52

если вы хотите использовать значения из формы и сохранить их динамические, попробуйте это с 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
источник
40

Я предпочитаю это:

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

«Выбрать здесь» исчезает после выбора опции.

Чонг Лип Панг
источник
1
Я пробовал это, но «Выбрать здесь» не отображается. Первый вариант пуст
Богдан Матес
Какой браузер вы используете?
Чонг Лип Панг
Я использую браузер Google Chrome версии 52.0.2743.116 м
Богдан Матес,
2
Я тоже использую этот браузер и не испытываю никаких проблем.
Чонг Лип Панг
2
Попробуйте добавить, value=""чтобы убедиться, что вы получите пустое значение.
Райан Уолтон
31

Улучшение для ответа Нобиты . Также вы можете улучшить визуальный вид выпадающего списка, скрыв элемент «Выбрать здесь».

<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

Лучший способ на мой взгляд:

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

Почему не отключен?

При использовании отключенного атрибута вместе со <button type="reset">Reset</button>значением не сбрасывается исходный заполнитель. Вместо этого браузер выбирает сначала не отключенную опцию, которая может вызвать ошибки пользователя.

Пустое значение по умолчанию

Каждая производственная форма имеет проверку, тогда пустое значение не должно быть проблемой. Таким образом, мы можем иметь пустой, не обязательный выбор.

Атрибуты синтаксиса XHTML

selected="selected"синтаксис - единственный способ совместимости с XHTML и HTML 5. Это правильный синтаксис XML, и некоторые редакторы могут быть рады этому. Это более обратно совместимо. У меня нет сильного чувства по этому поводу, но если вышеупомянутые аргументы являются вашими требованиями, вы должны следовать полному синтаксису.

Михал Мелец
источник
Это скрывает весь вариант для меня
АДЕЛЬ НАМАНИ
@ADELNAMANI Не могли бы вы предоставить ссылку на ваш код? Я думаю, что ваша проблема не связана с моим ответом.
Михал Мелец
19

Другой пример; используя JavaScript, чтобы установить выбранную опцию.

(Вы можете использовать этот пример для создания цикла значений в выпадающем компоненте)

<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);
союзник
источник
не должно ли это el.selected = "selected";соответствовать стандарту w3?
7yl4r
5
@ 7yl4r No. selectedявляется логическим свойством, определенным w3c - w3.org/TR/html401/interact/forms.html `17.6.1 Выбранные предварительно выбранные параметры [CI] - если установлено, этот логический атрибут указывает, что этот параметр предварительно выбранный. Для получения дополнительной информации об использовании см. w3c schools - w3schools.com/jsref/prop_option_selected.asp
Союзник
14

Выбранный атрибут является логическим атрибутом.

При наличии он указывает, что параметр должен быть предварительно выбран при загрузке страницы.

Предварительно выбранная опция будет отображаться первой в раскрывающемся списке.

<select>
  <option value="volvo">Volvo</option>
 <option value="saab">Saab</option>
 <option value="vw">VW</option>
 <option value="audi" selected>Audi</option> 
</select> 
тилак
источник
10

Если вы реагируете, вы можете использовать в defaultValueкачестве атрибута вместо valueтега select.

Johan
источник
7

Если вы используете select с angular 1, тогда вам нужно использовать ng-init, в противном случае второй вариант не будет выбран, так как, ng-model переопределяет выбранное значение по умолчанию

<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

Я использовал эту функцию php для генерации опций и вставил ее в мой 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;
  }

?>

И затем в коде моей веб-страницы я использую его, как показано ниже;

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

Если $ endmin создается из переменной _POST каждый раз, когда страница загружается (и этот код находится внутри формы, которая публикует сообщения), то по умолчанию выбирается ранее выбранное значение.

Graeme
источник
4

Атрибут value тега отсутствует, поэтому он не отображается так, как вы выбрали. По умолчанию первая опция отображается при загрузке раскрывающейся страницы, если для тега установлен атрибут value .... Я решил эту проблему таким образом

X-Coder
источник
4

Этот код устанавливает значение по умолчанию для элемента выбора HTML с 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

Ты можешь использовать:

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

вместо,

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

оба одинаково верны.

Сэм
источник
3

Я просто сделал бы значение первого параметра выбора значением по умолчанию и просто скрыл это значение в раскрывающемся списке с помощью новой скрытой функции HTML5. Нравится:

   <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
источник
2

Я сам использую это

<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

Вам просто нужно поставить атрибут «selected» на определенную опцию, вместо того, чтобы напрямую выбирать элемент.

Вот фрагмент для одного и нескольких рабочих примеров с разными значениями.

   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

Set selected = "selected", где значение параметра равно 3

пожалуйста, смотрите ниже пример

<option selected="selected" value="3" >3</option>
Akbor
источник
На Firefox, он не будет работать при перезагрузке страницы
Себастьян
на моей системе его работа на Firefox
Акбор
1

Проблема в <select>том, что иногда он не связан с состоянием того, что отображается в данный момент, и, если что-то не изменилось в списке параметров, значение изменения не возвращается. Это может быть проблемой при попытке выбрать первый вариант из списка. Следующий код может получить первый вариант, выбранный в первый раз, но сам onchange="changeFontSize(this)"по себе этого не сделает. Существуют методы, описанные выше, использующие фиктивную опцию, чтобы заставить пользователя изменить значение, чтобы получить фактическое первое значение, например, начать список с пустого значения. Примечание: onclick вызовет функцию дважды, следующий код - нет, но решает проблему, возникающую в первый раз.

<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

Я использую Angular, и я устанавливаю опцию по умолчанию

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>

Автор сценария:

sselectedVal:any="test1";
upog
источник
0

Вот как я это сделал ...

<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
источник
4
Кажется, есть некоторое несоответствие этому решению. Если имя элемента «select», не должен ли ключ переменной $ _POST быть «select» - откуда берется «drop_down»? Кроме того, если предположить, что это было ошибкой, а это на самом деле проверка переменной $ _POST ['select'] для значения, любое непустое значение вернет true, и, таким образом, все элементы <option> будут помечены как «выбранные». Может быть, мне не хватает чего-то неотъемлемого в этом ответе?
Райан
0

Вы можете попробовать вот так

  <select name="hall" id="hall">
      <option>1</option>
      <option>2</option>
      <option selected="selected">3</option>
      <option>4</option>
      <option>5</option>
    </select>
tebbe93
источник
0

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>

Фрагмент исходного кода JavaScript:

document.querySelectorAll('[data-selected]').forEach(e => {
   e.value = e.dataset.selected
});
Mwspace LLC
источник
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>
доступ предоставлен
источник