Як я можу встановити значення за замовчуванням для елемента HTML <select>?


1457

Я думав, що додавання "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>елемент обраний за замовчуванням?


Нічого собі, це питання настільки корисне, і воно буквально перейшло до вірусного ха-ха
finnmglas

Відповіді:


2150

Встановіть selected="selected"опцію, якою ви хочете бути за замовчуванням.

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

19
<value value = "3" selected = "selected"> 3 </option> Значення передається у вигляді рядка, коли вибрано варіант 3.
Sree Rama

5
І продовжуйте використовувати атрибут id для <Select>, і це не добре використовувати атрибут value для елемента <select> html.
Sree Rama

215
Частина = "вибрана" не потрібна. Просто <параметр вибрано> буде виконано, як зазначено в інших відповідях.
MindJuice

56
@MindJuice Те, що я написав, є дійсним поліглотом HTML / XML. Використання <параметр вибрано> добре для браузера, але може призвести до відхилення документа іншими аналізаторами. Мені здається, що можна епізодично використовувати XPath / XSLT у веб-документах.
Borealid

70
Якщо ви використовуєте Angular, зверніть увагу, що ng-modelпереосмислює вибране за замовчуванням значення (навіть як невизначене, якщо ви не встановили зв'язаний об'єкт). Зайняв мене час, щоб зрозуміти, що саме тому selected="selected"варіант не був обраний.
metakermit

624

Якщо ви хочете мати текст за замовчуванням як своєрідний заповнювач / підказку, але не вважається дійсним значенням (щось на кшталт "завершити тут", "вибрати свою націю" тощо), ви можете зробити щось подібне:

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


60
Я думаю, що саме це шукає більшість людей. Хороша відповідь.
chrisallick

1
Це був зовнішній jsfiddle, де CSS просто необхідний, щоб він не відображався уздовж межі екрана. Через кілька місяців він змінився на вбудований фрагмент коду, і хлопець, який редагував, просто зберігав його в прикладі. Ви можете відредагувати та видалити його з фрагмента, якщо він вас дійсно турбує.
Нобіта

Ще краще рішення - використовувати hiddenатрибут замість цього. Дивіться відповідь @ chong-lip-phang нижче: stackoverflow.com/a/39358987/1192426
Іван Акулов

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

1
Дивовижна відповідь!
japes Sophey

234

Повний приклад:

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


11
Це простіше, ніж використання selected = "selected".
Родріго

57
selected = "selected" має працювати для всіх доктіпів. XHTML не любить атрибути без значень.
ps2goat

14
@Rodrigo Чи справді так важко писати selected="selected"? Я маю на увазі, що ти рятуєш? Час? Розмір? Це незначно, і якщо він робить код "суміснішим", чому б не зробити це ?
xDaizu

15
@ DanielParejoMuñoz, добре, це мізерно. Але якщо мій doctype - html, а не xhtml, навіщо взагалі витрачати будь-який байт?
Родріго

5
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 читайте .


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 (JSX).
Аарон С

72

Ви можете зробити це так:

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

Введіть "вибране" ключове слово всередині тегу опцій, яке ви хочете відображати за замовчуванням у своєму спадному списку.

Або ви також можете надати атрибут тегу опцій, тобто

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

13
Щоб зрозуміти, стандарт w3 - це <параметр вибрано = "вибрано"> 3 </option>
htmldrum

40
@JRM Я думаю, що ви маєте на увазі, що якщо для вашого документа сумісний XHTML, то атрибут повинен мати значення aa. У 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
Phil

51

якщо ви хочете використовувати значення з форми і тримати її динамічною, спробуйте це з 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

Я вважаю за краще це:

<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
Я спробував це, але "Вибрати тут" не відображається. Перший варіант порожній
Богдан Матес

Який браузер ви використовуєте?
Chong Lip Phang

Я використовую браузер Google Chrome версії 52.0.2743.116 м
Богдан Матес

2
Я також використовую цей браузер і не відчуваю жодних проблем.
Chong Lip Phang

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


Це приховує весь варіант для мене
ADEL NAMANI

@ADELNAMANI Чи можете ви надати посилання на свій код? Я думаю, ваша проблема не пов'язана з моєю відповіддю.
Michał Mielec

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] - Якщо встановлено, цей булевий атрибут визначає, що цей параметр є попередньо вибрано.`
Ally

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.


7

Якщо ви використовуєте select з кутовим 1, то вам потрібно використовувати ng-init, інакше другий параметр не буде обраний, оскільки ng-модель заміняє вибране значення за замовчуванням.

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


4

атрибут значення тегу відсутній, тому він не відображається як потрібний. За замовчуванням з’являється перша опція на завантаженні спадної сторінки, якщо атрибут value встановлений на тегу .... Я вирішив цю проблему таким чином


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>

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

Вам просто потрібно поставити атрибут "вибраний" на певний параметр, а не направити для вибору елемента.

Ось фрагмент одного і того ж численного робочого прикладу з різними значеннями.

   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

Встановити вибраний = "вибрано", де значення параметра - 3

дивіться нижче приклад

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

На Firefox він не працюватиме при перезавантаженні сторінки
Себастьян

у моїй системі його робота на firefox
Akbor

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

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'] на значення, будь-яке не порожнє значення повернеться істинним, і тому всі пункти <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>

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
});

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>
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.