Какие значения могут отображаться в атрибуте selected из тега option? - PullRequest
29 голосов
/ 23 июня 2009

У меня есть разметка, похожая на следующую:

<select>
  <option selected="selected">Apple</option>
  <option selected="">Orange</option>
</select>

В этом случае «Оранжевый» отображается как выбранный пункт. Я ожидал, что пустое значение атрибута selected отменит его действие. Есть ли способ написать это, не пропуская атрибут?

Ответы [ 8 ]

31 голосов
/ 23 июня 2009

Разные браузеры могут относиться к этому атрибуту по-разному. Согласно документации MSDN (для Internet Explorer):

Чтобы выбрать элемент в HTML, это не необходимо установить значение ВЫБРАН атрибут для истины. Простой наличие набора атрибутов SELECTED его значение к истине.

В Firefox и Safari это работает:

<option selected='false' />

Из того, что я могу сказать, посмотрев на официальный стандарт WC3 для HTML4, поддерживается только:

<option selected='selected' />

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

26 голосов

HTML5 spec

https://www.w3.org/TR/html51/sec-forms.html#the-option-element

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

http://www.w3.org/TR/html5/infrastructure.html#boolean-attributes:

Наличие логического атрибута в элементе представляет истинное значение, а отсутствие атрибута представляет ложное значение.

Если атрибут присутствует, его значение должно быть либо пустой строкой, либо значением, которое является ASCII-регистронезависимым совпадением для канонического имени атрибута без начальных или конечных пробелов.

Заключение

Ниже приведены действительные, эквивалентные и истинные :

<option selected />
<option selected="" />
<option selected="selected" />
<option selected="SeLeCtEd" />

недействительно :

<option selected="0" />
<option selected="1" />
<option selected="false" />
<option selected="true" />

Отсутствие атрибута является единственным допустимым синтаксисом для false :

<option />

Рекомендация

Если вы хотите написать действительный XHTML, используйте selected="selected", поскольку <option selected> недопустимо, а другие альтернативы менее читабельны. Иначе, просто используйте <option selected>, так как он короче.

7 голосов
/ 23 июня 2009

единственное допустимое значение для выбранного атрибута в XHTML - " selected ", поэтому, если вы хотите, чтобы ваша разметка была совместимой с XHTML и работала во всех браузерах, оставив ее, это единственный выбор, чтобы сделать ее невыбранной

4 голосов
/ 23 июня 2009

Нет, наличие выбранного атрибута сообщает браузеру, что это выбранный элемент. Все, что находится внутри кавычек, игнорируется.

Редактировать: Что вы можете сделать (с Javascript), так это найти теги опций с selected = "" и удалить из них выбранный атрибут.

2 голосов
/ 08 ноября 2012

В HTML (в отличие от XHTML) простой атрибут selected без значения вообще работает нормально:

<option selected>Apple</option>
<option>Orange</option>

В XHTML (включая XHTML5) вам нужно значение, которое также должно быть selected:

<option selected="selected">Apple</option>
<option>Orange</option>

Это также хорошо работает в HTML.

Обычно это относится к логическим значениям в (X) HTML. Способ установить их в ложь - полностью их опустить. Установка значений true и false может работать, но нестандартно.

Обратите внимание, что для списка опций по умолчанию выбран первый, поэтому в этом случае это вообще не требуется.

0 голосов
/ 23 июня 2009

Нет никаких других допустимых значений, кроме "selected" для этого атрибута. (http://www.w3schools.com/TAGS/att_option_selected.asp)

0 голосов
/ 23 июня 2009

Вам лучше установить свойство selectElement.selectedIndex из Javascript или вообще удалить атрибут.

0 голосов
/ 23 июня 2009

Согласно w3schools , вы должны установить его как: selected = "selected". Он сообщает вам, какой параметр был выбран изначально, и позволяет вам установить его позже через скрипт.

...