Полезная информация

Хотите узнать больше о расширениях? Посмотрите ролики, рассказывающие о работе с расширениями Firefox.

№114-07-2006 19:40:15

artsage
Участник
 
Группа: Members
Зарегистрирован: 14-07-2006
Сообщений: 8

Не работают вложенные списки в меню.

скрипт..
var navShown=false;
var navFade=null;
var NNN=(document.layers)?true:false;
var NIE=(document.all)?true:false;
var nameShown = "";

function hideNav()
{
if (navFade) {
clearTimeout(navFade);
navFade=null
}
if(navShown) {
if (NNN){
document.layers["kmnav"+nameShown].visibility="hide";
}else if (NIE){
document.getElementById("kmnav"+nameShown).style.visibility="hidden";
}
}
navShown=false;
nameShown="";
return true;
}
function showNav(name,X)
{
if (navFade) {
clearTimeout(navFade);
navFade=null
}
if(nameShown!=name)
{
X+=Math.round(((NNN)?window.innerWidth-16:((NIE)?document.body.clientWidth:0)))-800;
if (navShown) hideNav();
if (NNN) {
document.layers["kmnav"+name].top=18;
document.layers["kmnav"+name].left=X-15;
document.layers["kmnav"+name].visibility="show";
}else if (NIE){
document.getElementById("kmnav"+name).style.top=18;
document.getElementById("kmnav"+name).style.left=X-15;
document.getElementById("kmnav"+name).style.visibility="visible";
}
nameShown = name;
}
if(NNN)
navFade=setTimeout("hideNav();",10000);
navShown=true;
return true;
}
function closeNav()
{
navFade=setTimeout("hideNav();",100);
//hideNav();
return true;
}
function mouse_up (e)
{
closeNav();
return true;
}
if (NNN) {
window.onmouseup=mouse_up;
window.captureEvents(Event.MOUSEUP);
}

жуть эти слои...ослик с оперой всё нормал...мозилка отказывается....

http://sage.jino-net.ru/052.shtml

Отредактировано artsage (14-07-2006 21:10:17)


Совершить ошибку и не исправить ее - это и называется совершить ошибку.

Отсутствует

 

№215-07-2006 12:00:24

rurik
Участник
 
Группа: Members
Откуда: Ниж. обл.
Зарегистрирован: 15-10-2005
Сообщений: 488

Re: Не работают вложенные списки в меню.

Никто не отвечает. Ну ладно, я отвечу тогда :)

жуть эти слои...

Это точно  :) Только вот зачем их использовать? Метод layers использовался последний раз по-моему в Netscape 4, т.е. около 10 лет назад. Вам точно нужна поддержка Netscape? :)

Все современные браузеры (даже IE :) ) подеерживают метод getElementById. Так не лучше ли использовать его?

Выделить код

Код:

var variable=(document.getElementById)?true:false

Отредактировано rurik (15-07-2006 12:01:08)

Отсутствует

 

№315-07-2006 13:51:21

artsage
Участник
 
Группа: Members
Зарегистрирован: 14-07-2006
Сообщений: 8

Re: Не работают вложенные списки в меню.

Спасибо конечно за ответ, но может я туплю немного...:)
старый код . .

document.layers["kmnav"+nameShown].visibility="hide";

заменен...(в том числе и скобки)

document.getElementById("kmnav"+nameShown).visibility="hide";

и так везде где встречаются layers....
не работает...подскажи где я ошибся...


Совершить ошибку и не исправить ее - это и называется совершить ошибку.

Отсутствует

 

№415-07-2006 14:04:19

rurik
Участник
 
Группа: Members
Откуда: Ниж. обл.
Зарегистрирован: 15-10-2005
Сообщений: 488

Re: Не работают вложенные списки в меню.

Если метод getElementById поддерживается, то должен использоваться
document.getElementById("kmnav"+nameShown).style.visibility="hidden";

В противном случае (document.all)
document.all["kmnav"+nameShown].style.visibility = "hidden" (вроде бы :) )

Поддержку NN можно убрать (я бы убрал)

Отредактировано rurik (15-07-2006 14:24:21)

Отсутствует

 

№515-07-2006 14:19:25

artsage
Участник
 
Группа: Members
Зарегистрирован: 14-07-2006
Сообщений: 8

Re: Не работают вложенные списки в меню.

ААА...Всё получилось..сенкс rurik...
манипуляции

var navShown=false;
var navFade=null;
var NNN=(document.layers)?true:false; // layers заменить не уд. ошибка...
var NIE=(document.getElementById)?true:false; //вместо all подставлен .getElementById
var nameShown = "";

...

везде прописан матод .getElementById

document.getElementById["kmnav"+name].top=18;.....

получ. код....

var navShown=false;
var navFade=null;
var NNN=(document.layers)?true:false;
var NIE=(document.getElementById)?true:false;
var nameShown = "";

function hideNav()
{
if (navFade) {
clearTimeout(navFade);
navFade=null
}
if(navShown) {
if (NNN){
document.getElementById["kmnav"+nameShown].visibility="hide";
}else if (NIE){
document.getElementById("kmnav"+nameShown).style.visibility="hidden";
}
}
navShown=false;
nameShown="";
return true;
}
function showNav(name,X)
{
if (navFade) {
clearTimeout(navFade);
navFade=null
}
if(nameShown!=name)
{
X+=Math.round(((NNN)?window.innerWidth-16:((NIE)?document.body.clientWidth:0)))-800;
if (navShown) hideNav();
if (NNN) {
document.getElementById["kmnav"+name].top=18;
document.getElementById["kmnav"+name].left=X-15;
document.getElementById["kmnav"+name].visibility="show";
}else if (NIE){
document.getElementById("kmnav"+name).style.top=18;
document.getElementById("kmnav"+name).style.left=X-15;
document.getElementById("kmnav"+name).style.visibility="visible";
}
nameShown = name;
}
if(NNN)
navFade=setTimeout("hideNav();",10000);
navShown=true;
return true;
}
function closeNav()
{
navFade=setTimeout("hideNav();",100);
//hideNav();
return true;
}
function mouse_up (e)
{
closeNav();
return true;
}
if (NNN) {
window.onmouseup=mouse_up;
window.captureEvents(Event.MOUSEUP);
}


Совершить ошибку и не исправить ее - это и называется совершить ошибку.

Отсутствует

 

№615-07-2006 15:07:49

Al_H
Away
 
Группа: Members
Откуда: SPb
Зарегистрирован: 10-06-2005
Сообщений: 5508

Re: Не работают вложенные списки в меню.

Я в восторге.

Выделить код

Код:

var NIE=(document.all)?true:false;

...

Выделить код

Код:

}else if (NIE){
document.getElementById("kmnav"+name).style.top=18;

Это здорово!
Наверное, имелось в виду

Выделить код

Код:

var NIE=(document.getElementById)?true:false;

- тоже не очень удачно.
Предлагаю вариант:

Выделить код

Код:

function gElId(elId) {return ((document.getElementById)?document.getElementById(elId):((document.all)?document.all[elId]:null));}

и дальше вызывать объекты уже через gElId('id_элемента');
Вообще легче скрипт переписать, чем отлаживать. (Прошу прощения за такие слова, но это одна из самых популярных фраз на форуме. К сожалению, определение переменных isNN и isIE и затем оперирование ими - один из приемов веб-дизайна образца 2000 года, в наше время должно быть переключение не просто по функциональности, но и с учетом document.getElementById(), и лучше менять классы у элементов, а не конкретные свойства стилей.)

Отсутствует

 

Board footer

Powered by PunBB
Modified by Mozilla Russia
Copyright © 2004–2020 Mozilla Russia GitHub mark
Язык отображения форума: [Русский] [English]