IE 5, IE 6, <FIELDSET> и JavaScript

Ashotovich

Новичок
IE 5, IE 6, <FIELDSET> и JavaScript

Всем доброго времени суток.
У меня возникла неприятная проблемка: в IE 6 скрипт работает, а в IE 5, как оказалось - нет.
Иметтся следующее: Форма, в ней - чекбокс с событием onclick, ниже него - fieldset. Внутри fieldset - всякие чекбоксы.
При нажатии на первый чекбокс (который с событием onclick) у меня выполняется следующее: если fieldset имеет свойство disabled==true, то скрипт устанавливает disabled=fasle; если же disabled==false, то скрипт устанавливает disabled=true.

Теперь о самой проблеме. В IE 6 все работает нормально, а вот в IE 5 - нет. То есть элементу fieldset успешно присваивается свойство disabled=*** при нажатии на верхний чекбокс, но сам fieldset на экране не отключается - так и остается активным со всеми элементами внутри (в IE 6 он выключается и все элементы внутри него - тоже).

Да, и еще один обидный глюк. Почему-то я немогу напрямую присвоить fieldset-у с именем, допустим, fs1, какое-либо значение или свойство. При вызове команды document.Form1.fs1.disabled=false или подобной ей браузер ругается, что "document.Form1.fs1 есть Null или не является объектом". Поэтому мне приходится пробегать циклом по всей форме в поисках элемента с именем "fs1" и, найдя его, присваивать ему то, что нужно: document.Form1.elements.disabled=false.

Пожалуйста, помогите решить эти проблемы.
Заранее спасибо.

P.S. Вот, привожу упрощенный листинг:

PHP:
<form name="Form1">
<input type="checkbox" name="cb1" onclick='for (i=1; i<document.Form1.length; i++) {if (document.Form1.elements[i].name=="fs1") document.Form1.elements[i].disabled=true;}'><br>
<FIELDSET name="fs1" style="width:100"><LEGEND>FS1</LEGEND>
<input type="checkbox">aaa<br>
<input type="checkbox">bbb<br>
<input type="checkbox">ccc
</FIELDSET>
</form>
 
Спасибо, но оно не работает. Выдает следующее:
"document.forms.Form1.elements.fs1" есть Null или не является объектом
 
То есть скрипт упорно не хочет распознавать fs1 как элемент напрямую. Только через ж... :(
 
О, дело. Ругаться перестало. Но отключать - не отключает... Я даже статус свойства disabled вывожу алертом, выводится правильно:
PHP:
<input type="checkbox" name="cb1" onclick="document.forms[0].elements['fs1'].disabled=true; alert( document.forms[0].elements['fs1'].disabled);">
по второй команде выводится исправно true, но толку-то? На странице элементы остаются активными! А в IE6 - нет, все работает ок. :(
 
Может, у свойства disabled есть аналог в стилях? Что-нибудь типа style="disabled"?.. Типа как я могу вывести двумя способами скрытый элемент:
<input type="hidden" name="aaa" value="aaa">
и
<input type="text" name="aaa" value="aaa" style="display:none">
 
В общем, похоже, что булёвое значение параметра disabled для fieldset введено только начиная с IE 6. В предыдущих же версиях IE само его наличие являетмя булёвым параметром...
Есть комментарии? А то я уже пишу на стене офиса "оставь надежду всяк сюда входящий"... :(
 
к сожалению у меня нету под рукой IE 5, вот такая штука вроде неплохо отрабатывает:

<html>
<body>

<form name="myForm">

<input type="checkbox" name="cb" onclick="document.forms['myForm'].elements['fs'].style.visibility='hidden';"><br>

<FIELDSET ID="fs" style="width:100">
<input type="checkbox">a<br>
<input type="checkbox">b<br>
<input type="checkbox">c<br>
</FIELDSET>

</form>

</body>
</html>
 
;) Спасибо, Krisha.
С видимостью/невидимостью как раз проблем не возникало. Другой вариант, кстати:

...onclick="document.myForm.elements.fs.style.display='none'...

(при использовании id скрипт волшебным образом перестал ругаться на то, что "есть Нулл или не является объектом" - и то хлеб - можно элементы явно указывать, а не в массивы лазить).
 
2 Зануда:
Говорит, что "объект не поддерживает это свойство или метод"... :(
 
Да, getElementByID() - это в Опере хорошо прокатывает. А у моих подопечных - IE во всех инкарнациях.
 
Хм. Неожиданно обнаружил, что IE5 вообще не воспринимает конструкцию *.disabled=true... Приплыли...
 
PHP:
<form name="Form1">
<input type="checkbox" onclick="document.Form1.ddd.disabled=true"><br>
<input type="checkbox" name="ddd">ddd<br>
</form>
Вот такая штуковина работает (верхний чекбокс отключает нижний по клику). Это меня замкнуло просто.
А вот с fieldset такое не проходит... И с div тоже :(
 
Я выяснил. динамическое свойство disabled для объекта fieldset поддерживается только начиная с IE 5.5. Так что прощай совместимость. Придется пользоваться скрытием ненужных элементов формы, благо хоть это доступно для fieldset. Да, нельзя забывать, что значения элементов скрытого объекта все равно передаются при сабмите формы. Так что придется еще обрабатывать верхний чекбокс на предмет вкл/выкл, дабы отбросить ненужные значения в случае, если чекбокс не выделен галкой.
PHP:
<input type="checkbox" name="cb1" onclick="if (document.Form1.fs1.style.visibility=='hidden') document.Form1.fs1.style.visibility='visible'; else document.Form1.fs1.style.visibility='hidden';"><br>
<form name="Form1">
<fieldset id="fs1" style="width:200; visibility:hidden">
<input type="checkbox">ddd<br>
<input type="checkbox">eee
</fieldset>
</form>
 
Сверху