Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [JavaScript][CSS] Pokazywanie/ukrywanie dwóch div'ów na raz, za pomocą jednego kliknięcia
Ok-a
post
Post #1





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 8.09.2009

Ostrzeżenie: (0%)
-----


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 (IMG:style_emoticons/default/rolleyes.gif) ale nadal rozwijało tylko jeden.
Będę wdzięczna za jakąkolwiek pomoc (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 12)
wookieb
post
Post #2





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




...
[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.
Go to the top of the page
+Quote Post
kilas88
post
Post #3





Grupa: Zarejestrowani
Postów: 305
Pomógł: 25
Dołączył: 27.01.2007

Ostrzeżenie: (0%)
-----


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.

Go to the top of the page
+Quote Post
wookieb
post
Post #4





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




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.
Go to the top of the page
+Quote Post
kosma
post
Post #5





Grupa: Zarejestrowani
Postów: 44
Pomógł: 0
Dołączył: 11.11.2007

Ostrzeżenie: (0%)
-----


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...

Ten post edytował kosma 9.09.2009, 04:19:14
Go to the top of the page
+Quote Post
kilas88
post
Post #6





Grupa: Zarejestrowani
Postów: 305
Pomógł: 25
Dołączył: 27.01.2007

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
Ok-a
post
Post #7





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 8.09.2009

Ostrzeżenie: (0%)
-----


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 (IMG:style_emoticons/default/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 (IMG:style_emoticons/default/winksmiley.jpg)
Będę wdzięczna za kolejne wskazówki (gotowe rozwiązania?) (IMG:style_emoticons/default/winksmiley.jpg)



kilas88 - niestety tego, co napisałeś też nie umiem zastosować (IMG:style_emoticons/default/sad.gif)
Go to the top of the page
+Quote Post
flashdev
post
Post #8





Grupa: Zarejestrowani
Postów: 812
Pomógł: 117
Dołączył: 2.12.2008

Ostrzeżenie: (10%)
X----


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

Ten post edytował flashdev 10.09.2009, 10:33:52
Go to the top of the page
+Quote Post
CyberDuck_
post
Post #9





Grupa: Zarejestrowani
Postów: 135
Pomógł: 15
Dołączył: 17.08.2009

Ostrzeżenie: (0%)
-----


Masz tu, a oni niech sie kloca (IMG:style_emoticons/default/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

Ten post edytował CyberDuck_ 10.09.2009, 14:13:00
Go to the top of the page
+Quote Post
flashdev
post
Post #10





Grupa: Zarejestrowani
Postów: 812
Pomógł: 117
Dołączył: 2.12.2008

Ostrzeżenie: (10%)
X----


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. }


(IMG:style_emoticons/default/ph34r.gif) (IMG:style_emoticons/default/ph34r.gif) (IMG:style_emoticons/default/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
Go to the top of the page
+Quote Post
pablo89pl
post
Post #11





Grupa: Zarejestrowani
Postów: 143
Pomógł: 19
Dołączył: 7.09.2009
Skąd: Rzeszów

Ostrzeżenie: (0%)
-----


o w d**e ....jaki zawijas...;]
proponuje jQuery i prosta funkcje (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
CyberDuck_
post
Post #12





Grupa: Zarejestrowani
Postów: 135
Pomógł: 15
Dołączył: 17.08.2009

Ostrzeżenie: (0%)
-----


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 (IMG:style_emoticons/default/blinksmiley.gif) " ... (IMG:style_emoticons/default/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 ?

Ten post edytował CyberDuck_ 10.09.2009, 16:23:28
Go to the top of the page
+Quote Post
kosma
post
Post #13





Grupa: Zarejestrowani
Postów: 44
Pomógł: 0
Dołączył: 11.11.2007

Ostrzeżenie: (0%)
-----


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

Ten post edytował kosma 10.09.2009, 23:10:06
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 4.04.2026 - 14:16