Получение значения окна 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 всегда показывает пустую, никогда не выбранную опцию. Однако это работает в .

Ответы

Ответ 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;
    }
  }