>Форум Mozilla Россия http://forum.mozilla-russia.org/index.php >Разработка http://forum.mozilla-russia.org/viewforum.php?id=18 >Не работает выпадающее меню, написанное на Java http://forum.mozilla-russia.org/viewtopic.php?id=18495 |
MacOS > 12-08-2007 08:54:54 |
Его пример можно найти здесь: Текст следующий:
Само меню:
Может проблема где-то в неправильном написании обработчика document.onclick=change Буду очень благодарен за помощь в решении этой проблемы, т.к. альтернативы этого меню не найду. (например JSCookTree слишком сложный и ресурсоемкий). Хотелось бы сделать именно этот вариант, в IE и Opere работает, а в Firefox не знаю что делать... |
Sergeys > 12-08-2007 12:25:39 |
=>разработка |
Azathoth > 12-08-2007 15:53:38 |
MacOS Но это только первая ошибка из которой все остальное вытекает... |
MacOS > 12-08-2007 18:28:20 |
Я ведь не кодер на JavaScript, поэтому так и не понял, что в if(!document.all) return необходимо исправить... Вроде ж все правильно.. В Firefox проблема в том что при наведении на меню, стрелка даже не сменяется на hand, броузер не видит даже ссылку на обработчик <!--.folding{cursor:hand;font-weight:bold}//--> |
Azathoth > 12-08-2007 18:53:56 |
MacOS
Это от того, что не существует у стиля cursor значения hand. Но есть значение pointer, которое однако не поддерживается в IE, по крайней мере до шестой версии. Свойство all тоже IE специфично. И отсутствует в стандартах DOM. В общем Вас жестоко обманули в той литературе, которую Вы прочли... |
MacOS > 12-08-2007 19:40:19 |
Ясно, а что скажете насчет этого скрипта, этот работает везде вроде как: http://jscook.yuanheng.org/JSCookMenu/tutorial.html Это все конечно хорошо, W3, стандарты DOM, но я ищу готовое решение, иначе мне придется нанимать профессионального программиста. |
MacOS > 12-08-2007 22:12:08 |
Ухх... Запарился я. Может на вскидку что-то скажете. Как быстро заставить его открыватся. На что заменить document.all? |
stoneflash > 12-08-2007 22:47:23 |
document.getElementById(id) ? |
Azathoth > 13-08-2007 05:41:56 |
MacOS
Быстро не получится. Тут нужно все переписывать. Могу в помочь, но мне нужен полный исходник. |
MacOS > 13-08-2007 12:36:53 |
Вот полный текст, его лучше сюда скопировать, поскольку на ресурсе где исходник он вообще не правильно представлен, его пришлось из рабочего примера выдирать. Т.е., он вот, и я его никак не изменял, в 2 броузерах это работает: <style> И сама реализация скрипта в виде 2 папок, в которых по 2 директории: |
Al_H > 13-08-2007 13:25:35 |
MacOS У Вас скрипт, сделанный на проприетарных свойствах IE. Причем очень древний. Опера часть из них реализовывает, но полагаться на них не стоит, потому что большая часть их работает исключительно в IE. Выделить код Код:function gElId(eId) {return ((document.getElementById)?document.getElementById(eId):((document.all)?document.all[eId]:null));} и в дальнейшем обращаться уже к ней: 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> - или в обработчиках событий оформить отдельной функцией, типа И в 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)? |
MacOS > 13-08-2007 13:46:32 |
Спасибо! Получается Приятно иметь дело с профессионалами.
Это у меня в проекте, но их Safari так себе, особенно тот который вышел под PC, отображает все криво. |
MacOS > 13-08-2007 14:56:55 |
Столкнулся тут еще с такой проблемой. Браузеры по разному понимаю события. В Opere и Firefox нормально работает сочетание onmouseover \ onmouseout (но в IE меню дребезжит, т.е. когда ведешь мышь очень быстро открывается и закрывается) В IE onmousemove \ onmouseout (однако в Опере такое же сразу закрывается). А возможно ли повлиять на задержку этих обработчиков? Не удобно получается. Сделать примеру чтобы onmouseout начинал действовать когда пользователь отведет на достаточное расстояние |
Azathoth > 14-08-2007 08:24:18 |
MacOS
А причина такого поведения не заметна? |
MacOS > 14-08-2007 22:44:52 |
Azathoth
Та уже неважно. Просто написал разные обработчики в зависимости от типа броузера. $menu="onmousemove"; $agent=getenv("HTTP_USER_AGENT"); if(strlen($agent)>2&&!strstr($agent,'IE')) {$menu="onmouseover";} |