Xpoint
   [напомнить пароль]

Не работает переключение слоёв в Opera и FireFox

Метки: [без меток]
2011-09-29 03:06:50 [обр] Evader[досье]

Здравствуйте!
Итак, опишу проблему.
Я сделал себе страничку, но она корректно работает только в IE. В Opera и Firefox - "не алё". :(
Вот, хотелось бы получить какую-нибудь помощь по решению вопроса.
А теперь детально. На моей страничке (адрес: enter.clan.su/gracia/maphr/index.htm ) справа можно видеть меню. При клике на элементы этого меню, должны появляться/исчезать соответствующие им слои, каждый со своим контентом. Кроме того, эти слои можно мышкой ещё и перемещать в пределах страницы. Однако же, Опера и FF даже не желают отображать слои, не говоря о том, чтобы их перемещать. Так как я с HTML - на "Вы", то стряпал эту страницу давным-давно при помощи DreamWeaver 4.0 (стареньким ещё), поэтому половину кода на страничке я не разумею. Хотя ума хватило на то, чтобы накачать с интернета всяких скриптов и позасовывать их на страничку. :D
HTML-код самой странички совать сюда не рискую, т.к. файл "весит" 24+ Кбайт из-за вставки ДримВивером каких-то своих кодов. Да и скрипт для открытия/скрытия слоёв прописан не только в самой страничке, но и в .CSS-файле. Рекомендую скачать по ссылке заархивированный вариант (для локального просмотра/редактирования): enter.clan.su/x/maphr.zip
Жаль, что у вас тут нельзя под спойлер прятать текст.
Ах, да. Вот браузеры в которых я проверял свою страничку: IE 8.0/ Opera 11.50/ Mozilla Firefox 6.0.
Хм.
Впрочем, ладно. Попробую всё-таки выложить сюда ключевые части HTML-кода со своей странички. Хотя сомневаюсь, что хватит ума на правильный результат.
Вот часть содержимого файла index.htm:

<!-- Вкл/Выкл слоев. START -->
<script>
<!--
var mo_lastMenu;
var lastMenu = "null";
if (document.layers) {
visible = 'show';  hidden = 'hide';
}
else if (document.all) {
visible = 'visible';  hidden = 'hidden';
}
function toggle(menu) {
if (document.layers) {
Menu = document.layers[menu];
}
else if (document.all) {
Menu = document.all(menu).style;
}
if (Menu.visibility == visible) {
Menu.visibility = hidden;
}
else {
clean(lastMenu);
Menu.visibility = visible;
}
lastMenu = Menu;
}
function clean(Menu){
if (Menu == "null"){
return;
}
if (Menu.visibility == visible) {
Menu.visibility = hidden;
}
}
<!-- Вкл/Выкл слоев. END -->

А вот тут - участок файла common-update.css:

.Menu {
position: absolute;
font-family : MS Sans Serif;
visibility: hidden;
}
.hide {
visibility: hidden;
font-family : MS Sans Serif;
}
BODY {
SCROLLBAR-FACE-COLOR: #514333;
SCROLLBAR-HIGHLIGHT-COLOR: #CCCC99;
SCROLLBAR-SHADOW-COLOR: #999933;
SCROLLBAR-3DLIGHT-COLOR: #CCCCCC;
SCROLLBAR-ARROW-COLOR: #CCCCCC;
SCROLLBAR-DARKSHADOW-COLOR: #666633;
CURSOR:  url(../../common/la2-style/cursor01.cur);
margin: 0 0 0 0;
background-color: #272118;
background-attachment: fixed;
background-repeat: repeat;
background-position: 100% 100%;
height: 100%;
width: 100%;
left: 0px;
top: 0px;
font-family: "MS Sans Serif";
font-size: 10pt;
font-style: normal;
color: #FFFFCC;
clip: rect(   );
overflow: auto;
}

В общем, пожалуйста, подскажите/расскажите что и куда прописывать, чтобы функциональность слоёв сохранялась хотя бы в основных видах браузеров.
Заранее благодарю.

спустя 5 часов [обр] Lynn «Кофеман»(37/571)[досье]

Из каких закромов родины вы выкопали этот скрипт?
document.layers уже лет десять не существует, а document.all лет пять настоятельно не рекомендуется к использованию.

Все(!) современные браузеры умеют document.getElementById

P.S. Выкиньте свой DreamWeaver

спустя 22 минуты [обр] Evader[досье]
:D
Говорю же: скрипт не мой и накопал я его как бы не три-четыре года назад. ))) И не вина ДримВивера в том.
спустя 1 час 1 минуту [обр] Evader[досье]
Лучше подскажите в какимх строках что на что поменять. :]
спустя 5 часов [обр] Илья Cтpeльцын aka SelenIT(12/171)[досье]

Вот этот весь кусок

if (document.layers) {
visible = 'show'; hidden = 'hide';
}
else if (document.all) {
visible = 'visible'; hidden = 'hidden';
}
function toggle(menu) {
if (document.layers) {
Menu = document.layers[menu];
}
else if (document.all) {
Menu = document.all(menu).style;
}

замените на

visible = 'visible';  hidden = 'hidden';
Menu = document.getElementById(menu).style;

Но лучше всё-таки потратьте немного времени, чтобы разобраться с JS (см. напр. javascript.ru), это время окупится сторицей. Весь этот скрипт можно будет сделать четырьмя понятными строчками, а не запутанной "лапшой".

спустя 20 минут [обр] Илья Cтpeльцын aka SelenIT(12/171)[досье]

Ой, дико извиняюсь, пропустил важный кусок. Правильная замена вот такая:

visible = 'visible';  hidden = 'hidden';

function toggle(menu) {
   Menu = document.getElementById(menu).style;

Дальше, по идее, должно работать и так. Но это очень устаревший код :)

спустя 1 час 48 минут [обр] Алексей Севрюков(16/1292)[досье]

Илья Cтpeльцын aka SelenIT[досье] не должно так работать.

function toggle(menu)
 {
  var s=document.getElementById(menu).style;
  s.display=='none'?'':'none'; //  или s.visibility=='hidden'?'visible':hidden';  - плохой вариант, т.к. он резервирует место под скрытый блок.
 }

Evader[досье] c clean(lastMenu) отдельная тема, нужно HTML посмотреть, перед тем как писать.

спустя 1 час 52 минуты [обр] Evader[досье]

Ура! Поехало! :D
Дайте ж я вас расцалую!


Илья Cтpeльцын aka SelenIT[досье]
Заменил участок Вашим вариантом! Работает же! ))) Даже не смотря на то, что Вы сказали, что старый способ.
(ловите +3)


Алексей Севрюков[досье]
Попробовал сперва с s.display==... слои так и не показывались. Затем попробовал и с s.visibility==... - всё равно никак. Более того - в обоих случаях IE "намекал" на "Ошибку на странице".
Впрочем, за содействие тоже получите +1. :)

спустя 3 минуты [обр] Evader[досье]

Правда, в Опере и Фоксе слой не перетаскивается мышкой, но это уже мелочи. Возможно, что это даже лишнее. Самое главное с вашей помощью сделано.

ЗЫ: Кстати, я полезность сообщения отметил, а у вас в счётчиках ничего не прибавилось. :(

спустя 28 минут [обр] Евгений Седов aka KPbIC(0/187)[досье]
М Evader[досье] Пока ваши оценки просто запоминаются. Счетчики обновятся после полного закрытия темы. Сложная процедура.
Powered by POEM™ Engine Copyright © 2002-2005