В HTML, что должно случиться с выбранным, отключенным элементом option? - PullRequest
10 голосов
/ 08 сентября 2008

В моем конкретном примере я имею дело с раскрывающимся списком, например ::10000

<select name="foo" id="bar">
  <option disabled="disabled" selected="selected">Select an item:</option>
  <option>an item</option>
  <option>another item</option>
</select>

Конечно, это довольно бессмысленно, но мне интересно, определено ли какое-либо строгое поведение. Opera эффективно отклоняет атрибут «selected» и выбирает следующий элемент в списке. Все остальные браузеры, кажется, позволяют это, и это остается выбранным.

Обновление: Чтобы уточнить, меня особенно интересует первоначальный выбор. Я имею дело с одним из этих «Выберите элемент:» - выпадающих меню типа, в этом случае первый вариант действительно метка, и происходит действие onchange(). Это довольно хорошо «постепенно улучшается», в том смысле, что кнопка отправки присутствует и удаляется только через JavaScript. Если бы опция «выбрать ...» была удалена, то, что бы тогда ни стало первым, не было бы выбрано. Мы просто исключаем onchange выпадающих списков или следует выбрать опцию "select ...", но без эффекта?

Ответы [ 6 ]

6 голосов
/ 08 сентября 2008

Спецификации HTML немного расплывчаты (то есть полностью отсутствуют) в отношении этой странной комбинации. Они говорят, что элемент формы с установленным атрибутом disabled не должен быть успешным, поэтому он действительно не может быть выбран .

Браузер может хорошо отобразить его так, чтобы он выглядел выделенным, но он не должен отображаться в данных POST. Похоже, у Opera все правильно.

3 голосов
/ 08 сентября 2008

В спецификациях HTML указано, что как выбранные, так и отключенные параметры доступны для элемента <option>, но не указано, что должно произойти в случае конфликта. В разделе об отключенных элементах управления написано

Когда установлено, отключенный атрибут имеет следующие эффекты на элемент:

  • Отключенные элементы управления не получают фокус.
  • Отключенные элементы управления пропускаются во вкладках навигации.
  • Отключенные элементы управления не могут быть успешными.

это также говорит

Способ отображения отключенных элементов зависит от агента пользователя. Например, некоторые пользовательские агенты отключают пункты меню, ярлыки кнопок и т. Д. В этом примере элемент INPUT отключен. Следовательно, он не может получать пользовательский ввод, и его значение не будет отправлено в форме.

Хотя этот конкретный случай не указан, мое чтение говорит о том, что фактическое отображение «выбранного» «отключенного» элемента оставлено на усмотрение браузера. Пока пользователь не может выбрать его, он работает как стандарт. В нем говорится, что скрипт может воздействовать на элемент, поэтому Javascript может установить отключенную опцию как выбранную (или отключить выбранную опцию). Это не противоречит стандартам, но при отправке формы значение этой опции не может быть выбранным значением. В этом случае список выбора (я полагаю) должен иметь пустое значение.

2 голосов
/ 08 сентября 2008

В ответ на обновление в вопросе я бы сказал, что опция 'label' должна быть выбрана, но либо заставлять ее ничего не делать при отправке, либо через JavaScript, не позволяйте отправлять форму без выбора значения (при условии, что это обязательное поле).

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

1 голос
/ 08 сентября 2008

Согласно спецификации HTML 4.01, отключено является стандартным атрибутом для элемента опции , но поведение, вероятно, не определено в зависимости от стандарта (более подробно информация об элементе select и элементах options. Вот часть, которая, я думаю, может пролить свет на причины их реализации в Opera:

Если установлено, атрибут disabled имеет следующие эффекты для элемента:
* Отключенные элементы управления не получают фокус.
* Отключенные элементы управления пропускаются во вкладках навигации.
* Отключенные элементы управления не могут быть успешными.

Таким образом, весьма вероятно, что это лишь одна из тех вещей, где спецификация достаточно расплывчата, чтобы учесть обе интерпретации. Это тот тип идиосинкразии, который делает программирование для Интернета таким интересным и полезным. : P

0 голосов
/ 03 октября 2008

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

http://webbugtrack.blogspot.com/2007/11/bug-293-cant-disable-options-in-ie.html

0 голосов
/ 08 сентября 2008

Мы просто исключаем падение "onchange" в целом, или если опцию "выбрать ..." можно выбрать, просто без эффекта?

Раскрывающиеся списки "onchange" осуждаются более одержимыми стандартами типами.

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

должна ли выбираться опция "select ...", просто без эффекта?

Так что я просто сказал "Да" на ваш вопрос А или Б. : / Извините!

...