Порожній HTML SELECT без пустого елемента у випадаючому списку


110

Як реалізувати subj?

коли я пишу:

<form>
  <select>
     <option value="0">aaaa</option>
     <option value="1">bbbb</option>
  </select>
</form>

тоді вибраний за замовчуванням елемент "aaaa"

коли я пишу:

<form>
  <select>
     <option value=""></option>
     <option value="0">aaaa</option>
     <option value="1">bbbb</option>
  </select>
</form>

тоді вибраний за замовчуванням елемент порожній, але цей пустий елемент представлений у спадному меню.

як я можу реалізувати тег SELECT з пустим значенням за замовчуванням, яке приховано у спадному списку?


Відповіді:


182

Просто використовуйте відключені та / або приховані атрибути:

<option selected disabled hidden style='display: none' value=''></option>
  • selected робить цю опцію типовою.
  • disabled робить цей варіант нерозбірливим.
  • style='display: none'робить цю опцію не відображеною у старих браузерах. Див.: Чи можна використовувати документацію для прихованого атрибута.
  • hidden робить цю опцію не відображатися у випадаючому списку.

3
Насправді IE 11 відображає "приховану" опцію.
Edward Olamisan

6
Схоже, Webkit не підтримує атрибут "прихованого"
Етан Резор

2
Як згадується в « Чи можу я використовувати» , цей hiddenатрибут є ефективним display: none, тому для підтримки старих браузерів:<option selected disabled hidden style='display: none' value=''></option>
Нета

66

Ви можете по установці selectedIndexв -1використанні .prop: http://jsfiddle.net/R9auG/ .

Для старих версій jQuery використовуйте .attrзамість .prop: http://jsfiddle.net/R9auG/71/ .


@IronicMuffin: Спасибі; щойно перевірений і, здається, працює на всіх основних браузерах.
pimvdb

@zobidafly: Дякую за редагування; Я трохи детальніше розробив.
pimvdb

1
.attrне вдасться у нових версіях jQuery. Намагання бути розумним збило мене.
Карсон Іп

33

Просто за допомогою

<option value="" selected disabled>Please select an option...</option>

працюватиме де завгодно без скрипту і дозволить одночасно проінструктувати користувача.


25
<select>
     <option value="" style="display:none;"></option>
     <option value="0">aaaa</option>
     <option value="1">bbbb</option>
  </select>

1
ff / chrome - добре, opera / ie7-9 - не нормально, ви можете перевірити, що тут (з або без js): jsfiddle.net/R9auG/145, тож я рекомендую js-підхід від @pimvdb
tibalt

11

Ось простий спосіб зробити це за допомогою простого JavaScript. Це ванільний еквівалент сценарію jQuery, опублікований pimvdb. Ви можете протестувати тут .

<script type='text/javascript'>
  window.onload = function(){
    document.getElementById('id_here').selectedIndex = -1;
  }
</script>

.

<select id="id_here">
  <option>aaaa</option>
  <option>bbbb</option>
</select>

Переконайтесь, що "id_here" відповідає формі та JavaScript.


3

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

Ви можете (хоча я не рекомендую) спостерігати за подією зміни, а потім використовувати JS, щоб видалити перший варіант, якщо він порожній.


3
Чому ви не рекомендуєте цю поведінку?
Джош Ное

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

2

Для чисто html @isherwood чудове рішення. Для jQuery введіть свій ідентифікатор, який випадає, а потім виберіть його за допомогою jQuery:

<form>
  <select id="myDropDown">
    <option value="0">aaaa</option>
    <option value="1">bbbb</option>
  </select>
</form> 

Потім використовуйте цей jQuery, щоб очистити спадне місце при завантаженні сторінки:

$(document).ready(function() {
    $('#myDropDown').val(''); 
});

Або помістити його всередині функції самостійно:

$('#myDropDown').val(''); 

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


0

Ви можете спробувати цей фрагмент

$("#your-id")[0].selectedIndex = -1

Це працювало для мене.


1
Найкраще було б надати jsfiddle.net, який супроводжує відповідь, щоб дати чіткіше пояснення.
Анонім

1
Це передбачає, що ОП використовує jQuery.
evanrmurphy
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.