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>
 

Ashotovich

Новичок
Спасибо, но оно не работает. Выдает следующее:
"document.forms.Form1.elements.fs1" есть Null или не является объектом
 

Ashotovich

Новичок
То есть скрипт упорно не хочет распознавать fs1 как элемент напрямую. Только через ж... :(
 

Ashotovich

Новичок
О, дело. Ругаться перестало. Но отключать - не отключает... Я даже статус свойства disabled вывожу алертом, выводится правильно:
PHP:
<input type="checkbox" name="cb1" onclick="document.forms[0].elements['fs1'].disabled=true; alert( document.forms[0].elements['fs1'].disabled);">
по второй команде выводится исправно true, но толку-то? На странице элементы остаются активными! А в IE6 - нет, все работает ок. :(
 

Ashotovich

Новичок
Может, у свойства disabled есть аналог в стилях? Что-нибудь типа style="disabled"?.. Типа как я могу вывести двумя способами скрытый элемент:
<input type="hidden" name="aaa" value="aaa">
и
<input type="text" name="aaa" value="aaa" style="display:none">
 

Ashotovich

Новичок
В общем, похоже, что булёвое значение параметра disabled для fieldset введено только начиная с IE 6. В предыдущих же версиях IE само его наличие являетмя булёвым параметром...
Есть комментарии? А то я уже пишу на стене офиса "оставь надежду всяк сюда входящий"... :(
 

Krisha

pain in the neck
к сожалению у меня нету под рукой 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>
 

Ashotovich

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

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

(при использовании id скрипт волшебным образом перестал ругаться на то, что "есть Нулл или не является объектом" - и то хлеб - можно элементы явно указывать, а не в массивы лазить).
 

Ashotovich

Новичок
2 Зануда:
Говорит, что "объект не поддерживает это свойство или метод"... :(
 

Ashotovich

Новичок
Да, getElementByID() - это в Опере хорошо прокатывает. А у моих подопечных - IE во всех инкарнациях.
 

Ashotovich

Новичок
Хм. Неожиданно обнаружил, что IE5 вообще не воспринимает конструкцию *.disabled=true... Приплыли...
 

Ashotovich

Новичок
PHP:
<form name="Form1">
<input type="checkbox" onclick="document.Form1.ddd.disabled=true"><br>
<input type="checkbox" name="ddd">ddd<br>
</form>
Вот такая штуковина работает (верхний чекбокс отключает нижний по клику). Это меня замкнуло просто.
А вот с fieldset такое не проходит... И с div тоже :(
 

Ashotovich

Новичок
Я выяснил. динамическое свойство 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>
 
Сверху