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

В мире Mozilla происходит много интересных событий. Но вам не нужно постоянно посещать новостные сайты, чтобы быть в курсе всех изменений. Зайдите на ленту новостей Mozilla Россия.

№112-08-2007 08:54:54

MacOS
Участник
 
Группа: Members
Зарегистрирован: 12-08-2007
Сообщений: 19
UA: Firefox 2.0

Не работает выпадающее меню, написанное на Java

Его пример можно найти здесь:
http://www.dynamic-design.com.ua/develop/script/ex_8.htm

Текст следующий:

<style>
<!--.folding{cursor:hand;font-weight:bold}//-->
</style>
<script language="JavaScript1.2">
<!--
var head="display:''"
img1=new Image()
img1.src="plus.gif"
img2=new Image()
img2.src="minus.gif"
function change(){
if(!document.all)
return
if (event.srcElement.className=="folding"){
var x=event.srcElement.parentElement
if (x.all[2].style.display=="none"){
x.all[0].src="minus.gif"
x.all[2].style.display=''
}
else{
x.all[0].src="plus.gif"
x.all[2].style.display="none"
}
}}
document.onclick=change
</script>

Само меню:

<div><img src="plus.gif"><span class="folding">Заголовок</span>
<div style="list-style-image:url(list.gif);display:<?echo $mon;?>" style=&{head};>
<A HREF="index.php?page=adam"><? if ($page=="adam"):?> <font color=006699><?endif;?> Ссылка 1</A><BR>
<A HREF="index.php?page=adam"><? if ($page=="adam"):?> <font color=006699><?endif;?> Ссылка 2</A><BR>

Может проблема где-то в неправильном написании обработчика document.onclick=change

Буду очень благодарен за помощь в решении этой проблемы, т.к. альтернативы этого меню не найду. (например JSCookTree слишком сложный и ресурсоемкий).

Хотелось бы сделать именно этот вариант, в IE и Opere работает, а в Firefox не знаю что делать...

Отсутствует

 

№212-08-2007 12:25:39

Sergeys
Administrator
 
Группа: Administrators
Откуда: Moscow, Russia
Зарегистрирован: 23-01-2005
Сообщений: 14008
UA: Minefield 3.0
Веб-сайт

Re: Не работает выпадающее меню, написанное на Java

=>разработка


Через сомнения приходим к истине. Цицерон

Отсутствует

 

№312-08-2007 15:53:38

Azathoth
Участник
 
Группа: Extensions
Откуда: Хабаровск
Зарегистрирован: 02-02-2005
Сообщений: 2692
UA: Firefox 2.0

Re: Не работает выпадающее меню, написанное на Java

MacOS
Ошибка тут:
if(!document.all)
return

Но это только первая ошибка из которой все остальное вытекает...

Отредактировано Azathoth (12-08-2007 17:00:52)


...она старалась, чтобы я больше времени проводил в разных пионерлагерях и группах продлённого дня - кстати сказать, удивительную красоту последнего словосочетания я вижу только сейчас. (c) Виктор Пелевин

Отсутствует

 

№412-08-2007 18:28:20

MacOS
Участник
 
Группа: Members
Зарегистрирован: 12-08-2007
Сообщений: 19
UA: Firefox 2.0

Re: Не работает выпадающее меню, написанное на Java

Я ведь не кодер на JavaScript, поэтому так и не понял, что в if(!document.all) return необходимо исправить...

Вроде ж все правильно..

В Firefox проблема в том что при наведении на меню, стрелка даже не сменяется на hand, броузер не видит даже ссылку на обработчик :)

<!--.folding{cursor:hand;font-weight:bold}//-->

Отсутствует

 

№512-08-2007 18:53:56

Azathoth
Участник
 
Группа: Extensions
Откуда: Хабаровск
Зарегистрирован: 02-02-2005
Сообщений: 2692
UA: Firefox 2.0

Re: Не работает выпадающее меню, написанное на Java

MacOS

В Firefox проблема в том что при наведении на меню, стрелка даже не сменяется на hand

Это от того, что не существует у стиля cursor значения hand. Но есть значение pointer, которое однако не поддерживается в IE, по крайней мере до шестой версии.

Свойство all тоже IE специфично. И отсутствует в стандартах DOM. В общем Вас жестоко обманули в той литературе, которую Вы прочли... ;)
Советую ознакомиться с такими методами элементов DOM как: getElementById, getElementsByTagName, а так же свойствами: parentNode, childNodes, firstChild, lastChild, previousSibling, nextSibling.

Отредактировано Azathoth (12-08-2007 18:55:18)


...она старалась, чтобы я больше времени проводил в разных пионерлагерях и группах продлённого дня - кстати сказать, удивительную красоту последнего словосочетания я вижу только сейчас. (c) Виктор Пелевин

Отсутствует

 

№612-08-2007 19:40:19

MacOS
Участник
 
Группа: Members
Зарегистрирован: 12-08-2007
Сообщений: 19
UA: Firefox 2.0

Re: Не работает выпадающее меню, написанное на Java

Ясно, а что скажете насчет этого скрипта, этот работает везде вроде как:

http://jscook.yuanheng.org/JSCookMenu/tutorial.html

Это все конечно хорошо, W3, стандарты DOM, но я ищу готовое решение, иначе мне придется нанимать профессионального программиста.

Отредактировано MacOS (12-08-2007 19:40:54)

Отсутствует

 

№712-08-2007 22:12:08

MacOS
Участник
 
Группа: Members
Зарегистрирован: 12-08-2007
Сообщений: 19
UA: Firefox 2.0

Re: Не работает выпадающее меню, написанное на Java

Ухх... Запарился я.:whiteflag: :sick: :zzz:

Может на вскидку что-то скажете. Как быстро заставить его открыватся.

На что заменить document.all? :cry:

Отсутствует

 

№812-08-2007 22:47:23

stoneflash
Хитрый Лис
 
Группа: Extensions
Откуда: Msk
Зарегистрирован: 02-04-2006
Сообщений: 4341
UA: Minefield 3.0

Re: Не работает выпадающее меню, написанное на Java

На что заменить document.all?

document.getElementById(id) ?


«I actually hate programming, but I love solving problems» © Rasmus Lerdorf, PHP's Creator

Отсутствует

 

№913-08-2007 05:41:56

Azathoth
Участник
 
Группа: Extensions
Откуда: Хабаровск
Зарегистрирован: 02-02-2005
Сообщений: 2692
UA: Firefox 2.0

Re: Не работает выпадающее меню, написанное на Java

MacOS

Может на вскидку что-то скажете. Как быстро заставить его открыватся.

Быстро не получится. Тут нужно все переписывать.

Могу в помочь, но мне нужен полный исходник.


...она старалась, чтобы я больше времени проводил в разных пионерлагерях и группах продлённого дня - кстати сказать, удивительную красоту последнего словосочетания я вижу только сейчас. (c) Виктор Пелевин

Отсутствует

 

№1013-08-2007 12:36:53

MacOS
Участник
 
Группа: Members
Зарегистрирован: 12-08-2007
Сообщений: 19
UA: Firefox 2.0

Re: Не работает выпадающее меню, написанное на Java

Вот полный текст, его лучше сюда скопировать, поскольку на ресурсе где исходник он вообще не правильно представлен, его пришлось из рабочего примера выдирать.

Т.е., он вот, и я его никак не изменял, в 2 броузерах это работает:

<style>
<!--.folding{cursor:pointer; font-weight:bold}//-->
</style>
<script language="JavaScript1.2">
<!--
var head="display:''"
img1=new Image()
img1.src="plus.gif"
img2=new Image()
img2.src="minus.gif"
function change(){
if(!document.all)
return
if (event.srcElement.className=="folding"){
var x=event.srcElement.parentElement
if (x.all[2].style.display=="none"){
x.all[0].src="minus.gif"
x.all[2].style.display=''
}
else{
x.all[0].src="plus.gif"
x.all[2].style.display="none"
}
}}
document.onclick=change//-->
</script>

И сама реализация скрипта в виде 2 папок, в которых по 2 директории:
<div><img src="plus.gif"><span class="folding">Folder</span>
<div style="list-style-image:url(list.gif);display:none" style=&{head};>
<A HREF="index.php?page=">Text1</A><BR>
<A HREF="index.php?page=">Test2</a><BR>
</div></div>
<div><img src="plus.gif"><span class="folding">Folder</span>
<div style="list-style-image:url(list.gif);display:none" style=&{head};>
<A HREF="index.php?page=">Text1</A><BR>
<A HREF="index.php?page=">Test2</a><BR>
</div></div>

Отсутствует

 

№1113-08-2007 13:25:35

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

Re: Не работает выпадающее меню, написанное на Java

MacOS
Пожалуйста, не называйте JavaScript словом Java. Путаница получается.

У Вас скрипт, сделанный на проприетарных свойствах IE. Причем очень древний. Опера часть из них реализовывает, но полагаться на них не стоит, потому что большая часть их работает исключительно в IE.
Я бы посоветовал сделать две вещи:
1. Отказаться от использования document.all. Это можно сделать, перейдя на document.getElementById() - решение, подходящее для IE с 5 версии, либо даже расширить совместимость, написав функцию:

Выделить код

Код:

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

и в дальнейшем обращаться уже к ней:

Выделить код

Код:

var obj1=gElId(obj1Id);

2. Лучший, на мой взгляд, способ написать ниспадающее или разворачивающееся меню - переключение классов.
Определяете классы:

Выделить код

Код:

<style type="text/css">
<!--
.menuShow .submenu { ... }
.menuHide .submenu {display: none;}
-->
</style>

в HTML что-то вроде

Выделить код

Код:

<div class="menuLine">
    <div class="menuHide" onmouseover="this.className=this.className.split('Hide').join('Show');" onmouseout="this.className=this.className.split('Show').join('Hide');">
        меню1
        <div class="submenu">
            подменю1
        </div>
    </div>
    <div class="menuHide" onmouseover="this.className=this.className.split('Hide').join('Show');" onmouseout="this.className=this.className.split('Show').join('Hide');">
        меню2
        <div class="submenu">
            подменю2
        </div>
    </div>
    <div class="menuHide" onmouseover="this.className=this.className.split('Hide').join('Show');" onmouseout="this.className=this.className.split('Show').join('Hide');">
        меню3
        <div class="submenu">
            подменю3
        </div>
    </div>
</div>

- или в обработчиках событий оформить отдельной функцией, типа

Выделить код

Код:

onmouseover="showThisMenu(this,true);" onmouseout="showThisMenu(this,false);"

И в JavaScript

Выделить код

Код:

<script type="text/javascript" language="javascript">
<!--
function showThisMenu(thisMenu,menuSwitch) {
    if(!thisMenu || !thisMenu.className) return false;
    if(menuSwitch)
        return thisMenu.className=thisMenu.className.split('Hide').join('Show');
    else
        return thisMenu.className=thisMenu.className.split('Show').join('Hide');
}
//-->
</script>

P.S. А почему MacOS, а пишете из-под Windows(R)?

Отсутствует

 

№1213-08-2007 13:46:32

MacOS
Участник
 
Группа: Members
Зарегистрирован: 12-08-2007
Сообщений: 19
UA: Firefox 2.0

Re: Не работает выпадающее меню, написанное на Java

Спасибо! Получается :) Приятно иметь дело с профессионалами.

P.S. А почему MacOS, а пишете из-под Windows(R)?

Это у меня в проекте, но их Safari так себе, особенно тот который вышел под PC, отображает все криво.

Отсутствует

 

№1313-08-2007 14:56:55

MacOS
Участник
 
Группа: Members
Зарегистрирован: 12-08-2007
Сообщений: 19
UA: Firefox 2.0

Re: Не работает выпадающее меню, написанное на Java

Столкнулся тут еще с такой проблемой.

Браузеры по разному понимаю события.

В Opere и Firefox нормально работает сочетание onmouseover \ onmouseout (но в IE меню дребезжит, т.е. когда ведешь мышь очень быстро открывается и закрывается)

В IE onmousemove \ onmouseout (однако в Опере такое же сразу закрывается).

А возможно ли повлиять на задержку этих обработчиков? Не удобно получается. Сделать примеру чтобы onmouseout начинал действовать когда пользователь отведет на достаточное расстояние

Отредактировано MacOS (13-08-2007 15:18:07)

Отсутствует

 

№1414-08-2007 08:24:18

Azathoth
Участник
 
Группа: Extensions
Откуда: Хабаровск
Зарегистрирован: 02-02-2005
Сообщений: 2692
UA: Firefox 2.0

Re: Не работает выпадающее меню, написанное на Java

MacOS

но в IE меню дребезжит, т.е. когда ведешь мышь очень быстро открывается и закрывается

А причина такого поведения не заметна?


...она старалась, чтобы я больше времени проводил в разных пионерлагерях и группах продлённого дня - кстати сказать, удивительную красоту последнего словосочетания я вижу только сейчас. (c) Виктор Пелевин

Отсутствует

 

№1514-08-2007 22:44:52

MacOS
Участник
 
Группа: Members
Зарегистрирован: 12-08-2007
Сообщений: 19
UA: Firefox 2.0

Re: Не работает выпадающее меню, написанное на Java

Azathoth

А причина такого поведения не заметна?

Та уже неважно. Просто написал разные обработчики в зависимости от типа броузера.

$menu="onmousemove"; $agent=getenv("HTTP_USER_AGENT"); if(strlen($agent)>2&&!strstr($agent,'IE')) {$menu="onmouseover";}

Отсутствует

 

Board footer

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