Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Sprawdzanie czy div ma display: visible;
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
eko_moto
mam taki kod w JS:

Kod
<script language="Javascript>
function sh(id) {
    
    if (document.getElementById) { // DOM3 = IE5, NS6
  if (document.getElementById(id).style.display == "none"){
      document.getElementById(id).style.display = 'block';
  } else {
      document.getElementById(id).style.display = 'none';      
  }    
    } else {
  if (document.layers) {    
      if (document.id.display == "none"){
    document.id.display = 'block';
      } else {
    document.id.display = 'none';
      }
  } else {
      if (document.all.id.style.visibility == "none"){
    document.all.id.style.display = 'block';
      } else {
    document.all.id.style.display = 'none';
      }
  }
    }
}


oraz HTML:

  1. <a href="#" onClick="sh('galeria');">Pokaz/Ukryj Galeria</a>
  2. <a href="#" onClick="sh('home');">Pokaz/Ukryj Home</a>
  3. <div style="display: none;" id="galeria">tutaj tresc gallery</div>
  4. <div style="display: none;" id="home">tutaj tresc home</div>


i chodzi mi o to, że jak klikniemy w np. "Pokaz/Ukryj Galeria" a
<div id="home"> bedzie mial display:visible; to zamknie
<div id="home"> a wyswietli <div id="galeria">
To ma być taki sprawdzacz czy dwa div-y nie bedą otwarte.

Pytanie: Czy da się to napisać w JS? Jeśli się da to proszę o poradę, jak.
LBO
musisz stworzyc predefiniowana tablice z idkami ktore ma obslugiwac menu...
Kod
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Untitled Document</title>
<script language="Javascript">
function sh(id) {
    /*
  predefiniowana tablica z
  elementami obslugiwanymi
  przez menu
    */
    modules = new Array('galeria', 'home');
    for (i = 0; i < modules.length; i++) {
     if (i != id) {
            //alert(modules[i] + ' != ' + modules[id]);
            document.getElementById(modules[i]).style.display = 'none';
        } else {
            //alert(modules[i] + ' == ' + modules[id]);
            document.getElementById(modules[i]).style.display = 'block';
        }
    }
}
</script>
</head>

<body>
<a href="#" onClick="sh(0);">Pokaz/Ukryj Galeria</a><br />
<a href="#" onClick="sh(1);">Pokaz/Ukryj Home</a>
<div style="display: none;" id="galeria">tutaj tresc gallery</div>
<div style="display: none;" id="home">tutaj tresc home</div>
</body>
</html>


dziala pod IE 5, IE 6, Firefoxem, Netscape 7/8, Opera 7/8, Mozila 1.7/1.8
eko_moto
wielkie dzięki, chodzi śpiewająco!
guitar.gif
LBO
do atrybucie HREF wpisz:
Kod
javascript:void(0);

wtedy w przegladarka nie traktuje tego jako czysty link, bo inaczej robi sie zapis w historii browsera, i uaktywnia sie przycisk BACK
TAMLYN
Znalazłem ten kod przypadkiem, ale jest czymś czego od dawna szukałem winksmiley.jpg

Tylko mam jedno pytanko... Co zrobić, aby wszystkie div'y się "zamknęły"? blink.gif

---------------------

Ok, znalazłem rozwiązanie biggrin.gif Wystarczy stworzyć "pustego" div'a biggrin.gif

Ale natrafiłem także na błąd sadsmiley02.gif Jeżeli wewnątrz jednego div'a wstawię drugiego, nawet o innym id niż jest w skrypcie, to wszystko się sypie i wyświetla mi wszystkie div'y prócz tego "pustego" (chyba, bo jego nie widzę tongue.gif ) sadsmiley02.gif Jest na to jakaś rada?

---------------------

Ok, błąd był po mojej stronie sleep.gif Przepraszam za zaśmiecanie tematu sleep.gif sadsmiley02.gif
Zajec
Przy okazji planuję zapomnieć o wszystkim innym niż document.getElementById. To rozwiązanie jest obsługiwane przez:
IE5 wzywć, Operę 7 wzwyż i Firefoksa 1 wzwyż. Więc nie ma obaw, że jakaś popularna przeglądarka sobie nie poradzi.
TAMLYN
Czyli powinno zostać coś takiego? blink.gif

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
  4. <title>Untitled Document</title>
  5. <script type="text/javascript">
  6. function sh(id) {
  7. /*
  8. predefiniowana tablica z
  9. elementami obslugiwanymi
  10. przez menu
  11. */
  12. modules = new Array('galeria', 'home');
  13. for (i = 0; i < modules.length; i++) {
  14. if (i != id) {
  15. document.getElementById(modules[i]).style.display = 'none';
  16. } else {
  17. document.getElementById(modules[i]).style.display = 'block';
  18. }
  19. }
  20. }
  21. </head>
  22.  
  23. <ul>
  24. <li><a href="java script:void(0);" onClick="sh(0);">Pokaz/Ukryj Galeria</a></li>
  25. <li><a href="java script:void(0);" onClick="sh(1);">Pokaz/Ukryj Home</a></li>
  26. </ul>
  27. <div style="display: none;" id="galeria"><p>tutaj tresc gallery</p></div>
  28. <div style="display: none;" id="home"><p>tutaj tresc home</p></div>
  29. </body>
  30. </html>


Nie znam się dobrze na Javie i JS sleep.gif"

------------------
W kodzie uwzględniłęm poprawki @zajec'a i @LBO
Zajec
Niby dobrze, poza pewnymi innymi błędami... Bezpośrednio w body nie można wstawiać tekstu. Należy w jakiś blok go wrzucić. Listę ondośników (jak sądzę, to chcesz zrobić) należy zrobić za pomocą listy, czyli <ul> i <li>.

No i osoby bez JavaScript nie będą mogli przechodzić pomiędzy działami. Po co takie udziwnienie, nie można po prostu dwóch podstron zrobić?
TAMLYN
Mój skrypt wygląda zupełnie inaczej tongue.gif Trochę go przerobiłem... I nie chcę robić z tego menu, a zastąpić tym iframkę winksmiley.jpg Ne razie tylko się domyślam, że to zadziała dry.gif Co do osób z Java smile.gif Ta strona jest dla osób mających Flash'a i Jave biggrin.gif Później zrobię drugą wersję - alternatywną winksmiley.jpg Uważam to za dobre rozwiązanie winksmiley.jpg
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.