Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JavaScript][CSS] Pokazywanie/ukrywanie dwóch div'ów na raz
Forum PHP.pl > Forum > Przedszkole
Ok-a
Szukałam rozwiązania już w wielu miejscach, ale jeżeli jest tu gdzieś na forum i je przegapiłam, to byłabym wdzięczna za linka.


Chodzi o to, aby pokazać/ukryć dwa różne bloki tekstu, klikając na jeden odnośnik. Bloki te znajdują się w różnych częściach strony.

W tej chwili mam jakiś skrypt, który świetnie radzi sobie z rozwijaniem jednego bloku. Niestety o skryptach Javy nie wiem prawie nic, więc nie wiem, czy da się tam coś dopisać, żeby to działało też na ten drugi blok (i czy w ogóle coś takiego jest możliwe).

W HEAD to wygląda tak (mam nadzieję, że nie ma błędów - już nawet nie pamiętam skąd to skopiowałam...):
[JAVASCRIPT] pobierz, plaintext
  1. <script type="text/javascript">
  2. function toggleLayer( blok1 )
  3. {
  4. var elem, vis;
  5. if( document.getElementById )
  6. elem = document.getElementById( blok1 );
  7. vis = elem.style;
  8. if(vis.display==''&&elem.offsetWidth!=undefined&&elem.offsetHeight!=undefined)
  9. vis.display = (elem.offsetWidth!=0&&elem.offsetHeight!=0)?'block':'none';
  10. vis.display = (vis.display==''||vis.display=='block')?'none':'block';
  11. }
  12. </script>
[JAVASCRIPT] pobierz, plaintext

W BODY:
  1. <a href="java script:toggleLayer('blok1')">więcej</a>
  2.  
  3. <div id="blok1">Ukryty tekst</div>


Naiwnie próbowałam tak samo nazwać te dwa bloki rolleyes.gif ale nadal rozwijało tylko jeden.
Będę wdzięczna za jakąkolwiek pomoc smile.gif
wookieb
...
[JAVASCRIPT] pobierz, plaintext
  1. function toggleBlocks(b1, b2)
  2. {
  3. toggleLayer(b1);
  4. toggleLayer(b2);
  5. }
[JAVASCRIPT] pobierz, plaintext

A teraz sprawdzimy czy będziesz umiała odpowiednio jej użyć. Podpowiem użyj w href.
kilas88
Cytat(wookieb @ 8.09.2009, 17:16:16 ) *
Podpowiem użyj w href.



To i ja podpowiem: przeglądarki z wyłączoną obsługą JavaScript nie obsłużą takiego rozwiązania. Lepiej już zastosować zewnętrzną obsługę zdarzeń i przypisać obiektom zdarzenia onclick.

wookieb
Cytat(kilas88 @ 8.09.2009, 17:34:29 ) *
To i ja podpowiem: przeglądarki z wyłączoną obsługą JavaScript nie obsłużą takiego rozwiązania. Lepiej już zastosować zewnętrzną obsługę zdarzeń i przypisać obiektom zdarzenia onclick.

Stary jesteś boski. Jak masz wyłączony javascript to onclick też ci nie zadziała.
kosma
Jeśli wystarczy tylko odkryć lub schować kilka bloków jednocześnie to wystarczy onclick
  1. <a href="#" onClick="document.getElementById('blok_1').style.display='block';document.getElementById('blok_2').style.display='block';">Odkryj</a>
  2. <div style="display: none" id="blok_1">Ukryty tekst blok 1</div>
  3. <div style="display: none" id="blok_2">Ukryty tekst blok 2</div>


A z funkcją toggleLayer można odkrywać i zakrywać tak:
  1. <a href="java script:toggleLayer('blok');toggleLayer('blok2');">kliknij</a>
  2. <div style="display: none" id="blok">ukryty 1</div>
  3. <div style="display: none" id="blok2">ukryty 2</div>


Jeden blok rozwijało Ci dlatego ponieważ w dokumencie tylko jeden element może przybrać określony numer id i jeśli kilka bloków określisz id=blok to tylko jeden z nich przyjmie ten identyfikator, a jak pewnie zauważyłaś funkcja operuje document.getElementById czyli identyfikatorem z danego dokumentu.

edit:
uwaga na javascript w kodzie - ma być razem lecz forum rozdziela na dwa słowa (w plaintext i pobierając też wyświetla z błędem!).
W swoim skrypcie js nic nie zmieniaj...
kilas88
Cytat(wookieb @ 8.09.2009, 17:38:39 ) *
Stary jesteś boski. Jak masz wyłączony javascript to onclick też ci nie zadziała.


Ok, a teraz przeczytaj jeszcze raz, ale uważnie.

Dla jasności, piszę tutaj o usability strony. Oznacza to, że kod wygląda mniej więcej tak:
  1. <a href="/link1.html" id="menu1">Menu 1</a>

Następnie dołączamy zewnętrzny plik JavaScript, w którym dodajemy zdarzenie onClick (dzięki np. bind w jQuery) dla wybranych linków.

Rozwiązanie to wspaniale hula, zarówno w przeglądarkach z obsługą JavaScript, jak i bez. Poza tym nie zaśmieca kodu zagnieżdżonym JS.
Ok-a
kosma - podwójne wpisanie toggleLayer (bez spacji) niestety nie działa. Nadal rozwija tylko pierwszy blok (a wszystko mam zdefiniowane tak jak podałeś).



Cytat(wookieb @ 8.09.2009, 17:16:16 ) *
...
[JAVASCRIPT] pobierz, plaintext
  1. function toggleBlocks(b1, b2)
  2. {
  3. toggleLayer(b1);
  4. toggleLayer(b2);
  5. }
[JAVASCRIPT] pobierz, plaintext

A teraz sprawdzimy czy będziesz umiała odpowiednio jej użyć. Podpowiem użyj w href.

Sprawdziliśmy. Nie umiem winksmiley.jpg
Robiłam różne rzeczy z tym, co podałeś, no ale jak się nie zna podstaw działania JS, to się wiele nie nawojuje winksmiley.jpg
Będę wdzięczna za kolejne wskazówki (gotowe rozwiązania?) winksmiley.jpg



kilas88 - niestety tego, co napisałeś też nie umiem zastosować sad.gif
flashdev
Cytat(wookieb @ 8.09.2009, 17:38:39 ) *
Stary jesteś boski. Jak masz wyłączony javascript to onclick też ci nie zadziała.


Chyba umknął Ci gdzieś sens tego rozwiązania.

Użycie sposobu, jaki przedstawił @kilas88 jest lepsze ponieważ:
- atrybut href można użyć do przekierowania na statyczną stronę z zawartością diva
- w przypadku wyłączonego js nie będzie na stronie nieaktywnych linków
- google lepiej traktuje strony, które nie mają skryptów inline
CyberDuck_
Masz tu, a oni niech sie kloca biggrin.gif
Kiedys cos takiego potrzebowalem i zmienilem nieco kod dla
swoich potrzeb. Dzieki temu mozna :
1. schowac lub wyswietlic na przemian pojedyncze bloki
2. schowac lub wyswietlac kilka blokow na raz
3. schowac lub wyswietlic kilka blokow na przemian.
Znaczy jesli jeden jest widoczny to drugi schowany, itd ...

  1. function ShowOrHide(d1, d2, d3, d4, d5, d6, d7, d8, d9, d10, d11, d12, d13, d14, d15, d16, d17, d18, d19, d20, d21, d22, d23, d24 , d25, d26, d27, d28, d29, d30) {
  2.  
  3. if (d1 != '') DoDiv(d1);
  4. if (d2 != '') DoDiv(d2);
  5. if (d3 != '') DoDiv(d3);
  6. if (d4 != '') DoDiv(d4);
  7. if (d5 != '') DoDiv(d5);
  8. if (d6 != '') DoDiv(d6);
  9. if (d7 != '') DoDiv(d7);
  10. if (d8 != '') DoDiv(d8);
  11. if (d9 != '') DoDiv(d9);
  12. if (d10 != '') DoDiv(d10);
  13. if (d11 != '') DoDiv(d11);
  14. if (d12 != '') DoDiv(d12);
  15. if (d13 != '') DoDiv(d13);
  16. if (d14 != '') DoDiv(d14);
  17. if (d15 != '') DoDiv(d15);
  18. if (d16 != '') DoDiv(d16);
  19. if (d17 != '') DoDiv(d17);
  20. if (d18 != '') DoDiv(d18);
  21. if (d19 != '') DoDiv(d19);
  22. if (d20 != '') DoDiv(d20);
  23. if (d21 != '') DoDiv(d21);
  24. if (d22 != '') DoDiv(d22);
  25. if (d23 != '') DoDiv(d23);
  26. if (d24 != '') DoDiv(d24);
  27. if (d25 != '') DoDiv(d25);
  28. if (d26 != '') DoDiv(d26);
  29. if (d27 != '') DoDiv(d27);
  30. if (d28 != '') DoDiv(d28);
  31. if (d29 != '') DoDiv(d29);
  32. if (d30 != '') DoDiv(d20);
  33.  
  34. }
  35.  
  36. function DoDiv(id) {
  37. var item = null;
  38. if (document.getElementById) {
  39. item = document.getElementById(id);
  40. } else if (document.all){
  41. item = document.all[id];
  42. } else if (document.layers){
  43. item = document.layers[id];
  44. }
  45. if (!item) {
  46. }
  47. else if (item.style) {
  48. if (item.style.display == "none"){ item.style.display = ""; }
  49. else {item.style.display = "none"; }
  50. }else{ item.visibility = "show"; }
  51. }
  52.  
  53. function ShowOrHideAll(d1, d2, d3, d4, d5, d6, d7, d8, d9, d10, d11, d12, d13, d14, d15, d16, d17, d18, d19, d20, d21, d22, d23, d24 , d25, d26, d27, d28, d29, d30) {
  54.  
  55. if (d1 != '') DoDivAll(d1);
  56. if (d2 != '') DoDivAll(d2);
  57. if (d3 != '') DoDivAll(d3);
  58. if (d4 != '') DoDivAll(d4);
  59. if (d5 != '') DoDivAll(d5);
  60. if (d6 != '') DoDivAll(d6);
  61. if (d7 != '') DoDivAll(d7);
  62. if (d8 != '') DoDivAll(d8);
  63. if (d9 != '') DoDivAll(d9);
  64. if (d10 != '') DoDivAll(d10);
  65. if (d11 != '') DoDivAll(d11);
  66. if (d12 != '') DoDivAll(d12);
  67. if (d13 != '') DoDivAll(d13);
  68. if (d14 != '') DoDivAll(d14);
  69. if (d15 != '') DoDivAll(d15);
  70. if (d16 != '') DoDivAll(d16);
  71. if (d17 != '') DoDivAll(d17);
  72. if (d18 != '') DoDivAll(d18);
  73. if (d19 != '') DoDivAll(d19);
  74. if (d20 != '') DoDivAll(d20);
  75. if (d21 != '') DoDivAll(d21);
  76. if (d22 != '') DoDivAll(d22);
  77. if (d23 != '') DoDivAll(d23);
  78. if (d24 != '') DoDivAll(d24);
  79. if (d25 != '') DoDivAll(d25);
  80. if (d26 != '') DoDivAll(d26);
  81. if (d27 != '') DoDivAll(d27);
  82. if (d28 != '') DoDivAll(d28);
  83. if (d29 != '') DoDivAll(d29);
  84. if (d30 != '') DoDivAll(d30);
  85.  
  86. }
  87.  
  88. function DoDivAll(id) {
  89. var item = null;
  90. if (document.getElementById) {
  91. item = document.getElementById(id);
  92. } else if (document.all){
  93. item = document.all[id];
  94. } else if (document.layers){
  95. item = document.layers[id];
  96. }
  97. if (!item) {
  98. }
  99. else if (item.style) {
  100. if (item.style.display == "yess"){ item.style.display = ""; }
  101. else {item.style.display = "none"; }
  102. }else{ item.visibility = "show"; }
  103. }


Mozna chowac najwiecej do 30 blokow. Dla wiekszosci stron to w zupelnosci wystarcza.
Teraz jak to wywolac ...
Oczywiscie kod umieszczasz w sekcji head np tak :
  1. <script language="JavaScript" type="text/javascript" src="tablepokazschowaj.js"></script>

Teraz kawalki kodu :
  1. <tr id="opis02" style="display:none">

Tak wlasnie oznaczasz sobie dowolna nazwa bloki. W tym wypadku jest to ramka tabeli, ale
moze to byc cala tabela lub div czy cokolwiek innego w czym da sie dopisac id i style.
Na jednej stronie mozesz umiescic jednoczesnie kilka takich blokow i czy maja
one zostac przy starcie strony uwidocznione czy nie decydujesz wpisem :
  1. style="display:none" lub style="display:yess"

Wywolanie jest banalnie proste :
  1. <a href="java script:ShowOrHide('opis02')">Lista folderów</a>

Jesli potrzebujesz jednoczesnie wyswietlic lub schowac lub zrobic to naprzemiennie
to podajesz wiecej parametrow :
  1. <a href="java script:ShowOrHide('opis02','opis03','opisN')">Lista folderów</a>


Powodzonka
flashdev
Cytat(CyberDuck_ @ 10.09.2009, 15:07:23 ) *
  1. function ShowOrHide(d1, d2, d3, d4, d5, d6, d7, d8, d9, d10, d11, d12, d13, d14, d15, d16, d17, d18, d19, d20, d21, d22, d23, d24 , d25, d26, d27, d28, d29, d30) {
  2. ...
  3. }


ph34r.gif ph34r.gif ph34r.gif

[JAVASCRIPT] pobierz, plaintext
  1. function sugestia(){
  2. var i;
  3. for( i = 0; i < arguments.length; i++ ){
  4. alert("argument "+i+":\t"+arguments[i]);
  5. }
  6. }
  7. sugestia("tego", "się", "tak", "nie", "robi", ";)");
[JAVASCRIPT] pobierz, plaintext
pablo89pl
o w d**e ....jaki zawijas...;]
proponuje jQuery i prosta funkcje smile.gif
CyberDuck_
Wiecie co mi po Waszych tego sie tak nie robi jesli
to dziala i to bardzo sprawnie ?
Mozna skrocic sobie jak komus nie pasuje
do mniejszej ilosci.
Tysiac postow przed moim i taki laik jak ja
znalazl rozwiazanie, a poza tym tylko madrowanie
czytalem ... 'proponuje' ... a moze jeszcze 12000 postow
zanim ktos poda konkretne rozwiazanie ?
Wez sie jeden z drugim do roboty, a nie
"o przepraszam jQery nie dziala blinksmiley.gif " ... sciana.gif

A przyklad na to ze nie jestem goloslowny :
http://www.bluelan.pl/przyklad_gd/tabela.php
Komu nie dziala co ? Moze glowa Wam nie dziala ?
kosma
Ok-a oba przykłady które podałem działają, ja cienki jestem w te klocki i dlatego też przed wysłaniem posta sprawdziłem. Działa na 100%
Skopiuj i wklej co ja tu wkleiłem, zmień jedynie java script na javascript i musi działać!
Sprawdź sobie na czystym dokumencie...

I ja na szybko zrobiłem demo aby nie być gołosłownym => d e m o n s t r a c j a
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.