Может ли элемент HTML иметь SelectedIndex по умолчанию, равный -1, без запуска javascript для всей страницы?

#javascript #html #dom

#javascript #HTML #dom

Вопрос:

У меня есть несколько мест на моем веб-сайте, где требуется элемент управления стилем «combobox». Для этого я инкапсулировал элемент управления combobox в серверный компонент .NET для повторного использования. На некоторых страницах может быть поле со списком, на некоторых — нет.

По сути, это поле со списком содержит текстовое поле и «выпадающий список», выровненный соответствующим образом с CSS. Часть отображаемого HTML-кода просто:

 <select>
    <option>Option 1</option>
    <option>Option 2</option>
    <option>Option 3</option>
    <option>Option 4</option>
</select>
  

Выпадающий список должен начинаться с пустого, и изменение на любое значение (включая «Вариант 1») должно вызвать событие onchange.

Я добиваюсь этого, делая что-то вроде:

 document.getElementById("theSelectElement").selectedIndex = -1;
  

но я бы предпочел не запускать javascript для каждого элемента на странице. Я понимаю, что я мог бы использовать jQuery для выбора по классу CSS, но на большинстве страниц не будет элемента select, и ничего не произойдет.

Есть ли способ установить SelectedIndex, который инкапсулируется в сам тег? Что-то вроде:

 <select selectedIndex="-1">...
  

или

 <select onload="this.selectedIndex = -1">...
  

?

Комментарии:

1. Вы не можете добавить пустой параметр в качестве первого?

2. JavaScript «для всей страницы» не так уж и ужасен.. чего ты боишься? Даже без jQuery скрипт для набора selectedIndex всех выпадающих списков занимает очень мало строк и не вызовет замедления.

3. не могли бы вы изменить значение выбранного индекса на стороне сервера с помощью опции в элементе управления?

4. @DoozerBlake добавление пустой опции отличается от установки SelectedIndex = -1. Пустой параметр можно повторно выбрать после выбора другого параметра.

Ответ №1:

выбор — это держатель состояния радиосвязи, поэтому «невыбранного» состояния не существует

 <select name="aaa">
    <option value=""></option>
    <option>Option 1</option>
    <option>Option 2</option>
    <option>Option 3</option>
    <option>Option 4</option>
</select>
  

кстати, вы можете использовать пустой < option>

Комментарии:

1. хм … интересно (просто к вашему сведению, я не OP, и мне просто любопытно). У вас есть ссылка на какую-либо документацию по этому первому пункту? Кроме того, если это так, что именно происходит, когда вы выбираете -1 с помощью javascript?

2. Что такое «состояние радиосвязи»? Я понимаю, что вы подразумеваете под этим, но никогда не слышал этого термина. Что представляет radio в этом случае?

3. Пустой первый <option> работает нормально, но идея выпадающего списка состоит в том, чтобы показать пользователю возможные значения, которые они могут выбрать. Пробел появляется в верхней части возможных вариантов выбора. Если вы используете SelectedIndex = -1, нет возможности выбрать пустое значение, оно просто начинается с пустого.

4. @wes не совсем держатель состояния радиосвязи, подумайте <select name="emails" size="3" multiple="multiple"> … но очень близко к этому, верно. Оба radio s и select s, как вы указываете, начинаются с ничего не выбранного, но не позволяют вам «отменить выбор», как только вы сделаете выбор.

Ответ №2:

Вы можете использовать следующее: по умолчанию первый вариант будет выбран автоматически

 <select name="aaa">
    <option value="0">select any option</option>
    <option value="1">Option 1</option>
    <option value="2">Option 2</option>
    <option value="3">Option 3</option>
    <option value="4">Option 4</option>
</select>
  

Комментарии:

1. да, но мне нужно, чтобы значение по умолчанию было пустым (ожидается, что это часть работы стандартного выпадающего списка)

2. затем установите value свойство первого option как пустое. И если вам не нужен текст ни в одном из первых вариантов, тогда используйте @wes asnwwer .

Ответ №3:

Вот некоторая документация по select: http://www.w3.org/TR/html4/interact/forms.html#h-17.6

Ответ №4:

Если вы обернули его в свой собственный пользовательский элемент управления или пользовательский элемент управления, вам нужно будет публично раскрыть defaultSelection свойство (или как вы его называете), чтобы его можно было указать в теге вашего сервера.

Вы говорите о том, чтобы сделать это в <select> теге, но это разметка HTML, а не разметка на стороне сервера <ASP:DropDown ... > или <myControl:CustomSelect ... >

РЕДАКТИРОВАТЬ: если это чистый HTML, просто выведите выбор по умолчанию с selected набором свойств:

 <select>
    <option value="1">Top</option>
    <option selected="selected" value="-1">Middle (Empty)</option>
    <option value="2">End</option>
</select>
  

Комментарии:

1. это правда, но не совсем суть вопроса. Я действительно спрашиваю, как отображаемый HTML может достичь цели иметь пустое начальное состояние.