Проблемы с JavaScript в Firefox

Valtokru

При просмотре сайта через Firefox (и некоторые другие браузеры) не работают скрипты.
При просмотре IE все нормально.
В чем может быть дело и как это исправить?
Сайт: xantor.org
Действие скрипта: при нажатии на "плюсы" или названия разделов они раскрываются и появляется список тем
Скрипт писался не самостоятельно, образец брался в инете.
Скрипт:

<SCRIPT LANGUAGE="JavaScript">
<!-- Begin
//nom is the number of menus on your tree, change this if your want more menus
var nom = 5; // Number of menus
var usePictures = 3;

var ttls = new Array;
var subs = new Array;
var lastn;
var lastmove;

if (document.layers) {
visible = 'show';
hidden = 'hide';
}
else
if (document.all) {
visible = 'visible';
hidden = 'hidden';
}
for (var i = 1; i <= nom; i++) {
ttls[i] = ('title' + i);
subs[i] = ('submenu' +i);
}
function picopen(n) {
title = ('title' + n);
pic = ('pic' + n);
if (document.layers) {
document.layers[title].document.images[pic].src = "Misc/open.gif";
}
else if (document.all) {
document.all(pic).src = "Misc/open.gif";
}
}
function picclose(n) {
title = ('title' + n);
pic = ('pic' + n);
if (document.layers) {
document.layers[title].document.images[pic].src = "Misc/closed.gif";
}
else if (document.all) {
document.all(pic).src = "Misc/closed.gif";
}
}
lastn = (nom + 1);
lastmove = 0;
function lasttoggle(n,move) {
if (n <= nom) {
menu = ('submenu' + n);
if (document.layers) {
submenu = document.layers[menu];
}
else if (document.all) {
submenu = document.all(menu).style;
}
if (submenu.visibility == visible) {
submenu.visibility = hidden;
picclose(n);
for (var i = (n+1); i <= nom; i++) {
if (document.layers) {
document.layers[ttls[i]].top -= move;
document.layers[subs[i]].top -= move;
}
else if (document.all) {
document.all(ttls[i]).style.pixelTop -= move;
document.all(subs[i]).style.pixelTop -= move;
}
}
}
}
}
function toggle(n,move) {
menu = ('submenu' + n);
if (document.layers) {
submenu = document.layers[menu];
}
else if (document.all) {
submenu = document.all(menu).style;
}
if (submenu.visibility == visible) {
submenu.visibility = hidden;
if (usePictures) picclose(n);
for (var i = (n+1); i <= nom; i++) {
if (document.layers) {
document.layers[ttls[i]].top -= move;
document.layers[subs[i]].top -= move;
}
else if (document.all) {
document.all(ttls[i]).style.pixelTop -= move;
document.all(subs[i]).style.pixelTop -= move;
}
}
}
else {
submenu.visibility = visible;
if (usePictures) picopen(n);
if (lastn != n) {
lasttoggle(lastn,lastmove);
}
for (var i = (n+1); i <= nom; i++) {
if (document.layers) {
document.layers[ttls[i]].top += move;
document.layers[subs[i]].top += move;
}
if (document.all) {
document.all(ttls[i]).style.pixelTop += move;
document.all(subs[i]).style.pixelTop += move;
}
}
}
lastn = n;
lastmove = move;
}
</script>

Вызов функции:

<a href="#" onclick="javascript: toggle(1,60); return false"><img name="pic1" src="Misc/closed.gif" border="0">

pitrik2

и?
ты хочешь чтобы мы весь этот скрипт читали и разбирали?
бери ставь плагин к лисе: консоль ошибок console 2.0
запускай скрипт и смотри в какой строчке она выдаст ошибку

kruzer25

В чем может быть дело и как это исправить?
Похоже, что дело в какой-то ошибке. Исправить - надо поменять код в строчке с ошибкой на правильный.

pilot

Error: submenu is not defined
Source File: http://xantor.org/
Line: 115

Т.е. ошибка тут:
if (submenu.visibility == visible) {  

pilot

А ваще, программиста этого — на мыло. CSS не знает.

Valtokru

if (submenu.visibility == visible) { 

Спасибо! А на что нужно исправить? Одно равно поставить?
И какие еще ошибки - в чем проявляется то, что программист не знает CSS?

ava3443

В чем может быть дело?
JavaScript написан не по стандарту (имя которому ECMAScript а специально под IE. Погугли на тему "document.all mozilla"
как это исправить?
для начала думаю стоит if-ы типа вот этого
if (document.layers) {
submenu = document.layers[menu];
}
else if (document.all) {
submenu = document.all(menu).style;
}

поменять на вот такие:
if (document.getElementById && document.getElementById(menu) != null) {
submenu = document.getElementById(menu).style
}
else if (document.layers) {
submenu = document.layers[menu];
}
else if (document.all) {
submenu = document.all[menu].style;
}

pilot

http://mozillanews.org/?article_date=2004-07-23+18-06-59
Тут проверяется document.all и document.layers. Когда они есть, submenu создается. В Firefox у document ничего такого нет.
Т.е. этот скрипт кривой и не годится, он только для IE.
Некошерно у элементов менять стиль напрямую. Классы надо заводить.
Обработчики нажатий вешаются через Ж.
Ну и тд — код кривой.
Лучше поискать скрипт поновее.

artimon

Я бы сказал, что это скрипт вообще надо выкинуть…

Valtokru

Ок, понял. Поищу новый.

Bibi

вот пример, с комментариями.
http://blog.go-test.net/2006/09/04/simple-showhide-blocks-wi...

kruzer25

Погугли на тему "document.all mozilla"
Какие же вы извращенгцы
Автору треда - не слушай его, гугли на тему document.getElementById!

nikita270601

Ты хоть дочитал пост до конца?

Valtokru

Сейчас пытаюсь вставить пример . Работает везде, но в таблицу толком пока не влезает
Оставить комментарий
Имя или ник:
Комментарий: