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

1083

Я думал, что добавление атрибута "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> выбран по умолчанию?

Теги:
html-select

21 ответ

1755
Лучший ответ

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

<option selected="selected">
3
</option>
  • 16
    <option value = "3" selected = "selected"> 3 </ option> Значение будет передано в виде строки, если выбрана опция 3.
  • 5
    Продолжайте использовать атрибут id для <Select>, и не рекомендуется использовать атрибут value для элемента <select> html.
Показать ещё 12 комментариев
396

Если вы хотите, чтобы текст по умолчанию был своего рода заполнитель/подсказкой, но не считался допустимым значением (что-то вроде "complete here", "select your nation" ecc.) вы можете сделать что-то вроде этого:

<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>
  • 35
    Я думаю, это то, что ищет большинство людей. Хороший ответ.
  • 1
    Это был внешний jsfiddle, где css просто необходим, чтобы он не появлялся вдоль границы экрана. Через несколько месяцев он был отредактирован до фрагмента встроенного кода, и парень, который редактировал, просто сохранил его в примере. Вы можете отредактировать и удалить его из фрагмента, если он действительно вас беспокоит.
Показать ещё 4 комментария
201

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

<select name="hall" id="hall"> 
  <option> 
    1 
  </option> 
  <option> 
    2 
  </option> 
  <option selected> 
    3 
  </option> 
  <option> 
    4 
  </option> 
  <option> 
    5 
  </option> 
</select> 
  • 9
    Это проще, чем использовать selected = "selected".
  • 53
    selected = "selected" должно работать для всех типов документов. XHTML не любит атрибуты без значений.
Показать ещё 6 комментариев
59

Вы можете сделать это следующим образом:

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

Предоставьте "выбранное" ключевое слово внутри тега параметра, который вы хотите по умолчанию указывать в раскрывающемся списке.

Или вы также можете указать атрибут тега опции i.e.

<option selected="selected">3</option>
  • 13
    Просто чтобы прояснить, стандарт w3 - это <option selected = "selected"> 3 </ option>
  • 39
    @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/...
Показать ещё 1 комментарий
57

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

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

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

Узнайте больше о том, почему здесь, на странице "Реагирование" .

  • 2
    Вы можете установить предварительно выбранную опцию в раскрывающемся списке, используя атрибут value для <select> , то есть <select value="3"> , но он недопустим в валидаторе W3C.
  • 2
    Да, но это не HTML, это JSX, поэтому он не должен следовать правилам W3C. HTML, сгенерированный React, в конце концов, действителен.
Показать ещё 2 комментария
45

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

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

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

'Choose here' исчезает после выбора опции.

  • 1
    Я пробовал это, но «Выбрать здесь» не отображается. Первый вариант пуст
  • 0
    Какой браузер вы используете?
Показать ещё 3 комментария
28

Улучшение для nobita ответа. Также вы можете улучшить визуальный вид выпадающего списка, спрятав элемент "Choose here".

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

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

Атрибут selected - это логический атрибут.

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

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

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

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

4

Если вы используете select с angular 1, вам нужно использовать ng-init, иначе второй вариант не будет выбран, поскольку ng-model переопределяет выбранное значение 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>
3

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

3

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

Я использовал эту функцию 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 каждый раз, когда страница загружается (и этот код находится внутри формы, в которой размещаются сообщения), то по умолчанию выбрано ранее выбранное значение.

2

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

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

вместо,

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

оба одинаково правильны.

1

Я сам использую его

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

Вам просто нужно поставить атрибут "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>
0

Я просто сделал бы значение первого параметра выбора значением по умолчанию и просто скрыл это значение в раскрывающемся списке с новой скрытой функцией 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>
0

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню