Получение значения окна SELECT в Internet Explorer
У меня есть поле выбора:
<select id="item1" name="Item 1">
<option> </option>
<option> Camera </option>
<option> Microphone </option>
<option> Tripod </option>
</select>
И у меня есть этот JavaScript:
var item1= document.getElementById("item1").value;
item1
всегда показывает пустую, никогда не выбранную опцию. Однако это работает в firefox.
Ответы
Ответ 1
Использование item.value работает для всех браузеров, кроме очень старых (Netscape 4?)? Причина, по которой это не работает в этом случае, заключается в том, что у вас нет атрибута value в параметрах. Вы должны объявить значение для каждого атрибута. То, что у вас есть, - это только свойство "text", которое обычно по умолчанию присваивает значение всякий раз, когда объявлено значение. В качестве альтернативы вы можете нажать некоторый код в событии onload окна, чтобы сделать "значение" каждого из этих параметров таким же, как "текст".
Третий способ использования приведенного ниже кода - старомодный способ:
var s = document.getElementById('item1');
var item1 = s.options[s.selectedIndex].value;
Ответ 2
Поскольку ваши теги параметров не имеют атрибута "значение" IE6, а IE7 возвращает вам пустую строку.
Вы должны прочитать значение из поля "текст" объекта Option следующим образом:
var item1 = s.options[s.selectedIndex].text;
в item1 вы получите нужное вам значение, не нарушая совместимость с Firefox и IE 8.
Ответ 3
Как дополнение к ответу # 1, будьте осторожны, так как <select> .selectedIndex может быть -1 несколько раз, что приведет к возникновению исключения при передаче в <select> .options [n]. Таким образом, вы можете сделать быстрый тест:
var s = document.getElementById('item1');
var item = (-1 != s.selectedIndex)?
s.options[s.selectedIndex] : null;
ИЗМЕНИТЬ
В комментарии в формате "Комментарий", s.selectedIndex может быть -1, если вы установите его с помощью JavaScript или вы создали пустой <select> .
Ответ 4
Код, чтобы получить vaiable columnName из окна SELECT, называемого layerDetails.styleColumn (тег SELECT имеет одинаковое имя и идентификатор), который работает во всех браузерах...
var columnName = document.getElementsByName('layerDetails.styleColumn')[0].value;
if ( columnName == null || columnName == '' )
{
columnName = document.getElementById('layerDetails.styleColumn').value;
}
if ( columnName == null || columnName == '' )
{
var select = document.getElementById('layerDetails.styleColumn');
columnName= select.options[select.selectedIndex].value;
if ( columnName == null || columnName == '' )
{
columnName= select.options[select.selectedIndex].text;
}
}