getElementById в IE и Firefox

_RVK_

Новичок
getElementById в IE и Firefox

Не могу понять в чем грабли. Вот этот код:
<div id='s1'>
<select name="foo" >
<option id='o1'>Visible</option>
<option id='o2'>Invisible</option>
</select>

</div>

<script language='JavaScript'>
function foo() {
o1 = document.getElementById("o1");
o2 = document.getElementById("o2");
o2.style.display = 'none';
}
foo();
</script>

Не работает в IE 6 но прекрасно работает в Firefox. Я понимаю что браузеры разные, но getElementById появилась изначально в IE причем давно. Что за чудеса?
 

MD

Guest
o2.style.display = 'none'; - дело скорее тут, чем в getElementById :)
 

_RVK_

Новичок
o2.style.display = 'none'; - дело скорее тут, чем в getElementById :)
Ну во первых работает а лисе. Во вторых ругается в ИЕ "Объект не поддерживает это свойство или метод" и без этой строчки.
И вообще почему o2.style.display = 'none'; неправильно
 

MD

Guest
хм .. странно.
попробовал в ие, действительно ругается.
причем только при первом "заходе" ... Ctrl+R и ругаться перестает.
изменил на:
var o1 = document.getElementById("o1");
var o2 = document.getElementById("o2");
ругаться перестало.
 

_RVK_

Новичок
Но и работать,как задумано, от этого так и не стало :) Все перехожу на Firefox!

-~{}~ 27.07.05 12:00:

У меня кстати не только при первом заходе ругается. Странное поведение.
 

MD

Guest
_RVK_
ИЕ давно известен своим поведением и послушанием :)
 

_RVK_

Новичок
ИЕ давно известен своим поведением и послушанием
Нет, ну я бы не удивился если бы не работало в Firefox. Но я всегда считал getElementById хорошей фичей ИЕ. Долго время только он её поддерживал. Очень удивляет что такой простейший пример не работает.
 
Попробуйте вот так

<div id='s1'>
<select name="foo" >
<option id='o1'>Visible</option>
<option id='o2' style='display: block'>Invisible</option>
</select>

</div>
имхо - должен перестать ругаться....
 

_RVK_

Новичок
Loshadka, дело не в реализации. Я сделаю подругому, и без getElementById. Просто интересна причина такого поведения.
 

Кром

Новичок
Да, тяжелый случай.
Перед тем как здесь отвечать, кто нибудь пробовал курить msdn? Попробуйте, помогает.
Стиль display у option не поддерживается.

Во-вторых, в IE можно напрямую обращаться к объектам по ID
так:
PHP:
document.getElementById("o1").style.color = "red";
document.getElementById("o1").style.backgroundColor = "green";
или так:
PHP:
o1.style.color = "red";
o1.style.backgroundColor = "green";
А если вы пишите так
PHP:
o1 = document.getElementById("o1");
o2 = document.getElementById("o2");

o1.style.color = "red";
o1.style.backgroundColor = "green";
то затираете сам объект ссылкой на объект, в результате ничего не работает. Поменяйте имена и все будет ок.

В-третьих:
изменил на:
var o1 = document.getElementById("o1");
var o2 = document.getElementById("o2");
ругаться перестало.
У javascript тоже есть область видимости, за что отвечает var.
Так как теперь ссылка на объект находится в области видимости функции, а сам объект в глобальной области, то "ругаться перестало".
 

MD

Guest
Кром
ух .. пасиба. надо действительно курить мсдн иногда :)
 

_RVK_

Новичок
Кром
Спасибо. Я не знал что в ие можно обращаться напрямую.
 

akxxiv

Новичок
Он ругается на само имя переменной o1 и o2. Если их изменить например на oo1 и oo2 ругаться перестанет

Упс.. опаздал пока писал
 
Сверху