IMHO.WS

IMHO.WS (http://www.imho.ws/index.php)
-   Веб-программирование (http://www.imho.ws/forumdisplay.php?f=29)
-   -   Вопрос по JavaScript (http://www.imho.ws/showthread.php?t=36605)

Dmitry_A 14.08.2003 12:57

Вопрос по JavaScript
 
У меня возникла проблема .

разные браузеры по разному реагируют на строчку

this.style.backgroundColor='....'; например ИЕ ее вообе не понимает и при этом как и положено ругается... ,а такую
this.setAttribute('bgcolor', '#d3d3d3', 0);
понимает как надо , но при этом продолжает ругатся...
хотя и понимать ее стал только IE начиная с 5 =(

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

вопрос второй .

у меня есть функция которая отвечает за то ,что она показывает и прачет слои .

Как написать функцию .которая прячет все слои
ид которых забиты в массив . при этом исключая определенный слой.

(надоело писать что-то типа ...
<a class = "black" href =<? echo $this->home;?> onMouseOver="hiddenLayer('PO'); hiddenLayer('build'); hiddenLayer('buildsub'); hiddenLayer('subPO')">

PS я все делал под оперу. а когда полез проверять в другие
браузеры вот такая фигня выползла ....

sanchos 14.08.2003 13:17

<TD bgcolor=#ffffff onMouseOver="this.style.backgroundColor='#000000';" onMouseOut="this.style.backgroundColor='#ffffff';">

Все работает...

Добавлено через 3 минуты:
По поводу слоев:
Так же написать функцию, которая прячет все слои кроме того слоя, id которого передается в эту "прячущую" функцию в качестве параметра.
Вроде думаю надо именно так делать :) Понял? :)

Dmitry_A 14.08.2003 13:17

У меня в опере работает, а в IE и еще одном браузере .. напроч отказывается

sanchos 14.08.2003 13:18

Я только что специально проверил. Работает. У меня старенький ослик ИЕ :/

Dmitry_A 14.08.2003 13:40

Причина почему мне надо прятать все слои из массива. в том , что если я буду прятать слои без разбора =) то у меня от страници НИЧЕГО кроме одной таблици не останется =) , а я в JavaScript полный чайник :(

Добавлено через 19 минут:
sanchos попробуй зайти на www.thr.ru/new/

и там левая часть меню сделана с использованием this.style.backgroundColor
а верхняя при помощи this.setAttribute()

я тогда непонимаю почему в первом случае у меня ИЕ лепит ошибки ( и во втором тоже .. но хотябы работает )

sanchos 14.08.2003 14:46

Чего-то ты меня паришь. Ошибки у тебя заметил... выскакивают и у меня :(
Скачал твою страницу... решил поправить один столбец (Вакансии). Все работает!
Вот твой код, исправленный мной. Уберай нафиг setAttribute и ставь style.background. Вот тебе пример:
<TD onmouseout="this.style.backgroundColor='#ffffff';"
onmouseover="this.style.backgroundColor='#d3d3d3';" vAlign=center
width=162><A class=black href="http://www.thr.ru/new/Personal/"
onmouseover="hiddenLayer('PO'); hiddenLayer('build'); hiddenLayer('buildsub'); hiddenLayer('subPO')">

Работает?

Добавлено через 1 минуту:
Цитата:

Dmitry_A:
Как написать функцию .которая прячет все слои
ид которых забиты в массив . при этом исключая определенный слой.
Или я чего-то недопонял? :)

RaZEr 14.08.2003 14:50

Первое, что бросается в глаза это попытка задать цвет:
Код:

this.style.backgroundColor='lightgray'
Вообще стандартные 16 цветов, это: aqua, black, blue, fuchsia, gray, green, lime, maroon, navy, olive, purple, red, silver, teal, white и yellow ...

Dmitry_A 14.08.2003 14:57

да работает Спасибо ... я каежтся понял почему у меня background неработал изначально ... setAttribut выполз после долгих попыток понять почему неработало.

sanchos 14.08.2003 15:00

Мне вот интересно... И почему? :)

RaZEr 14.08.2003 15:09

Цитата:

я каежтся понял почему у меня background неработал изначально
ну и почему же ;) ?

Dmitry_A 14.08.2003 15:24

this.style.backgroundColor='lightgray' :)
IE это как то неочень понимает =)) RaZEr я прочитал твое сообщение после того как понял это сам =))

я незнал что IE незнает таких цветов .. опера прекрасно к ним относится..

но спасибо , что указал на ошибку ...

RaZEr 14.08.2003 15:40

Опера на движе мозиллы ... а та понимает не стандартные 16 цветов из HTML 4.0, а расширенные SVG или проще говоря Мозилла уже пытается поддерживать CSSv3

Dmitry_A 14.08.2003 16:02

теперь перейдем ко второму вопросу .. т.к. я полный чайник в js :(

function hiddenLayer(layer) {
init();
if(IE) eval('document.all[layer].style.visibility = "hidden"')
if(NC) eval('document.layers[layer].visibility = "hidden"')
if(Opera) eval('document.getElementById(layer).style.visibility = "hidden"')
}

функция прячет мои слои ..
но писать вот так
<a class = "black" href = # onMouseOver="showLayer('PO'); hiddenLayer('build'); hiddenLayer('buildsub'); hiddenLayer('subPO')" >
меня уже достало ..

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


sanchos 17.08.2003 11:34

Тебе нужно прятать все слои кроме ОДНОГО? Так?

Dmitry_A 18.08.2003 12:41

Да именно так.

Aeon 18.08.2003 13:37

Dmitry_A
ну сделай функцию чтобы брала имя слоя как аргумент, прятала все слои кроме него и показывала его. подробнее объяснять, или разберёшься?

Dmitry_A 18.08.2003 14:38

в том то и дело ,что я незнаю "как спрятать все слои ..." я в яваскрипте практически 0 ... я с ним связался случайно ... и теперь приходится пытатся его понять... :rolleyes:

sanchos 18.08.2003 14:52

Код:

function visibleLayer(layer){
init();
var allLayers = new Array("l1", "l2", "l3", "l4", "l5"); // массив из имен слоев
for(i = 0; i < allLayers.length; i++){
    // если нужный слой, то показываем
    if(allLayers[i] == layer){
      if(IE) eval('document.all[layer].style.visibility = "visible"');
      if(NC) eval('document.layers[layer].visibility = "visible"');
      if(Opera) eval('document.getElementById(layer).style.visibility = "visible"');
      continue;
      }
    // прячем слой, если ненужный
    if(IE) eval('document.all[allLayers[i]].style.visibility = "hidden"');
    if(NC) eval('document.layers[allLayers[i]].visibility = "hidden"');
    if(Opera) eval('document.getElementById(allLayers[i]).style.visibility = "hidden"');
    }
}

Вроде, должно работать...
Юзать так:
<A href=# onMouseOver="visibleLayer('тот слой, который нужно оставить видимым')">

Получилось? :)

Dmitry_A 18.08.2003 15:07

да получилось ...
спасибо .. особенно за комментарии ... :)

sanchos 18.08.2003 15:43

Dmitry_A
Незачто :) Удачи тебе!


Часовой пояс GMT +4, время: 05:02.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.