#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 может достичь цели иметь пустое начальное состояние.