Javascript-форум (https://javascript.ru/forum/)
-   Internet Explorer (https://javascript.ru/forum/css-html-internet-explorer/)
-   -   массив options для select (в IE) (https://javascript.ru/forum/css-html-internet-explorer/9252-massiv-options-dlya-select-v-ie.html)

Polkan 06.05.2010 15:04

массив options для select (в IE)
 
Добрый день.
Подскажите, пожалуйста, почему IE не понимает массив options для элемента select? :(
Во всех остальных браузерах код работает правильно.
function remake(){
  formEl=d.getElementById('boxname');
    for(var j in formEl.options) {
      formEl.options[j].disabled=true;
    }
  }

IE пишет "объект не поддерживает это свойство или метод" и ставит указатель в начало строки formEl.options[j].disabled=true;

Что делать?
Как все-таки добраться до элементов списка?

Полный код:
Код:

<html>
<head></head>
<body>

  <script type="text/javascript">
  var d = document;

  function remake(){
  formEl=d.getElementById('boxname');
    for(var j in formEl.options) {
      formEl.options[j].disabled=true;
    }
  }
  </script>

<form id="filterform">
<select name="imyaboksa" id="boxname" >
        <option value=''>не важно</option>
        <option value="1" id="id1">field1</option>
        <option value="2" id="id2">field2</option>
        <option value="3" id="id3">field3</option>
</select>
</form>

<br /><br /><br /><br />
<a href="#" onclick="remake();">disable</a>

</body></html>


Skipp 06.05.2010 15:14

В IE нет такого свойства у option (disabled).

А почему бы просто не скрывать элементы списка?

Или disabled делать к select, если это возможно.

Так же вот немного инфы по этому.

Polkan 06.05.2010 15:26

Весь список-то делать неактивным не нужно. Именно, что какие-то из элементов должны остаться активными, а какие-то - нет.
В принципе не критично, можно и скрывать вместо того, чтобы делать неактивными, однако и такой вариант не проходит.
Заменив
formEl.options[j].disabled=true;

На
formEl.options[j].style.display='none';

Получаю ответ:
Код:

Сообщение: 'formEl.options[...].style' -  есть null или не является объектом
P.S. опять же, проблема только в IE
P.P.S спасибо за ссылку

Polkan 06.05.2010 15:56

Кстати, что интересно...
свойство disabled-то в целом работает.
Если получать по id именно <option>, то оно вполне себе становится неактивным. Т.е. проблема возникает именно в момент попытки использовать массив options

<html>
<head></head>
<body>

  <script type="text/javascript">
  var d = document;

  function test(){
  formEl=d.getElementById('id2');
    formEl.disabled=true;
  }
  </script>

<form id="filterform">
<select name="imyaboksa" id="boxname" >
        <option value=''>не важно</option>
        <option value="1" id="id1">field1</option>
        <option value="2" id="id2">field2</option>
        <option value="3" id="id3">field3</option>
</select>
</form>

<br /><br /><br /><br />
<a href="#" onclick="test();">test</a>

</body></html>

Skipp 06.05.2010 16:01

А ты проверял в ie ниже 8? там не работает:)

Polkan 06.05.2010 16:30

:( и правда не работает

Octane 06.05.2010 16:38

Извлекайте ненужные элементы из select
http://webmaster.ee/javascript/JavaScript/options.html

Polkan 06.05.2010 17:25

Octane,
Remove(), это, конечно хорошо. Проблема в том, что их потом надо как-то возвращать обратно. Add() - слишком громоздко для такой мелкой задачи.

Octane 06.05.2010 17:31

Что там громоздкого? Храните ссылки на все option в массиве и когда нужно удаляйте все, и добавляйте только нужные.


Часовой пояс GMT +3, время: 15:58.