Nasze strony wykorzystują pliki cookies. Używamy cookies i podobnych m.in. w celach reklamowych i statystycznych oraz w celu dostosowania serwisów do potrzeb użytkowników. Mogą też stosować je nasi reklamodawcy, firmy badawcze oraz dostawcy aplikacji. W przeglądarce można zmienić ustawienia dotyczące cookies. Więcej informacji. Jeśli nie wyrażasz zgody, opuść tę stronę.

wyswietlanie i ukrywabie obszarów

Forum dyskusyjne poświęcone zagadnieniom jezyka HTML i Flash oraz tworzeniu stron WWW.

Moderator: Grupa pościgowa ;-)

wyswietlanie i ukrywabie obszarów

Postprzez Artur » 24 maja 2003, o 11:01

Witam!!
Chcę osiągnąc taki efekt:
po najechaniu myszką na obrazek- "menu_pliki/galeria.jpg" ma się pojawić tekst -id="warstwagal"
I taki skleciłem skrypt - (ale nie działa :cry: )

<style type="text/css">
#warstwagal{visibility: hidden;}
</style>
<script type="text/javascript">
<!--
var layerRef="", styleSwitch="";
function init (){
if (navigator.appName == "Netscape"){
var layerRef="document.layers";
var styleSwitch="";
}else{
var layerRef="document.all";
var styleSwitch=".style";
}
}

function pokazObszar(warstwagal){
eval(layerRef +'["'+warstwagal+'"]'+styleSwitch+'.visibility="visible"');
}
function ukryjObszar(warstwagal){
eval(layerRef +'["'+warstwagal+'"]'+styleSwitch+'.visibility="hidden"');
}
-->
</script>
<body onLoad="init()"
.....
....<tr>
<td valign="top" width="350" align="right"><a href="galeria.html"><img src="menu_pliki/galeria.jpg" border=0 style="filter:alpha(opacity=50)" onMouseover="high(this);pokazObszar()" onMouseout="low(this);ukryjObszar()" alt=" Galeria " ></a></td>
<td valign="top" width="350" align="left"><div id="warstwagal">Galeria MIERZEJEWSCY to ..... strona z myślą o naszych klientach prezentując nasze gusta i upodobania</div></td></tr>


...Co jest nietak ????
Pozdrawiam.
Artur
Artur
Jestem tu już dłuższą chwilę
Jestem tu już dłuższą chwilę
 
Posty: 102
Dołączył(a): 1 października 2002, o 21:29

Postprzez Wydra707 » 26 maja 2003, o 21:38

A w bardziej skomplikowany sposób nie dało się tego zrobić? ;-)

Uwaga: analizuję jedynie fragment dla IE. Zakładam też, że nie masz błędów w pozostałych funkcjach wywoływanych przez zdarzenia.

Błąd 1 - krytyczny:
Na początku skryptu inicjujesz zmienne, a następnie, wewnątrz funkcji init() inicjujesz je ponownie. Efekt jest taki, że tworzone są nowe zmienne lokalne layerRef i styleSwitch, które po zakończeniu funkcji init() znikają. Zmienne globalne layerRef i styleSwitch są przez cały czas puste i funkcje, które z nich korzystają nie działają. Usuń więc słowa var z wnętrza funkcji init(). Poza tym, nie widzę sensu, aby kontrola przeglądarki odbywała się dopiero po załadowaniu całej strony. To może być skrypt przetwarzany natychmiast, bo obiekt window tworzony jest jako pierwszy i w chwili uruchomienia skryptu na pewno będzie obecny.

Błąd 2 - krytyczny:
Funkcje pokazObszar() i ukryjObszar() wywołujesz bez żadnych parametrów, tymczasem w definicji tych funkcji podany jest oczekiwany parametr o nazwie warstwagal. W momencie gdy funkcja jest wywoływana, a parametr nie jest dostarczony, przyjmuje on wartość undefined i takie "coś" jest wyszukiwane w kolekcji all (co prowadzi do błędu). Powinieneś albo wywoływać te funkcje z parametrem będącym łańcuchem - nazwą identyfikatora docelowego obiektu:
onmouseover="pokazObszar('warstwagal')"
...albo usunąć ten parametr z funkcji i zamiast niego podstawić wprost łańcuch 'warstwagal' (jeśli funkcje nie muszą być uniwersalne):
eval(layerRef +'["warstwagal"]'+styleSwitch+'.visibility="visible"');

Błąd 3:
W funkcjach pokazObszar() i ukryjObszar() użyłeś za dużej ilości cudzysłowów. Jeśli zmienna warstwagal miałaby być wykorzystywana, to ona sama jest już łańcuchem i nie trzeba obejmować jej jeszcze jednym cudzysłowem:
eval(layerRef +'['+warstwagal+']'+styleSwitch+'.visibility="visible"');
Explorer jest tolerancyjny i jakoś daje sobie z tym błędem radę, choć nie powinien.

Poza tym, jeśli to możliwe, unikaj stosowania takich samych nazw zmiennych, jak identyfikatory obiektów - to może powodować problemy (ostatnio pisałem o tym w artykule o przyspieszaniu skryptów).

Po wprowadzeniu tych zmian Twoja funkcja zaczyna działać.

Pozdrawiam
Paweł Rajewski
Wydra707
Znawca tematu
Znawca tematu
 
Posty: 482
Dołączył(a): 1 października 2002, o 19:21

Postprzez Artur » 27 maja 2003, o 19:28

:!: okej - działa po poprawkach :D
miałem chwilową zagwostkę jak przerobić to aby działało na innych obszarach.
Teraz kod wygląda tak:
<script type="text/javascript">
<!--
var layerRef="", styleSwitch="";
function init (){
if (navigator.appName == "Netscape"){
layerRef="document.layers";
styleSwitch="";
}
else{
layerRef="document.all";
styleSwitch=".style";
}
}

function pokazgal(warstwagal){
eval(layerRef +'['+warstwagal+']'+styleSwitch+'.visibility="visible"');
}
function ukryjgal(warstwagal){
eval(layerRef +'['+warstwagal+']'+styleSwitch+'.visibility="hidden"');
}
function pokazkontakt(warstwakontakt){
eval(layerRef +'['+warstwakontakt+']'+styleSwitch+'.visibility="visible"');
}
function ukryjkontakt(warstwakontakt){
eval(layerRef +'['+warstwakontakt+']'+styleSwitch+'.visibility="hidden"');
}
......function pokazInnaWarstwa(warstwaInnaWarstwa)
-->
</script>
Pozdrawiam.
Artur
Artur
Jestem tu już dłuższą chwilę
Jestem tu już dłuższą chwilę
 
Posty: 102
Dołączył(a): 1 października 2002, o 21:29


Powrót do HTML i tworzenie stron WWW

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników

cron