Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> ukrywanie div, ukrycie mam a chce zapamiętanie wartości
mateuszpi
post
Post #1





Grupa: Zarejestrowani
Postów: 140
Pomógł: 0
Dołączył: 11.09.2006
Skąd: Jaworzno

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


Witam
mam kod do ukrycia pewnego div-a (swoją drogą znaleziony u Was)
wszystko działa pięknie ale niestety po przejściu na inną stronę i powrocie to wszystko wraca do stanu początkowego a ja potrzebuje aby to co zostało ustawione było zapamiętane. zapewne trzeba użyć ciasteczek. prosze o pomoc i modyfikacje kodu:
  1. <script type="text/javascript">
  2. <!--
  3. function pokazUkryj(id)
  4. {
  5. document.getElementById(id).style.display = (document.getElementById(id).style.display == "none") ? "block" : "none";
  6. }
  7. -->
  8.  
  9. <a href="javascript:pokazUkryj('menu_1')">Zwiń/Rozwiń</a>
  10. <div id="menu_1" style="display:none"><!--Powinno być ukryte...-->
  11. </div>


z góry dzieki.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 8)
kubarek
post
Post #2





Grupa: Zarejestrowani
Postów: 43
Pomógł: 0
Dołączył: 19.02.2007

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


No dobrze rozumujesz. Użyj ciasteczek winksmiley.jpg A żeby zapamiętać i odczytać, to coś w ten deseń:
Kod
// odczytywanie:
window.onload = function(){
    var stan = odczytajCiastko(id_elementu);
    pokazUkryj(id_elementu);
}

// zapisywanie:
pokazUkryj = function(id) {
   ...
   var stan = (document.getElementById(id).style.display == "none");
   zapiszCiastko(id_elementu, stan);
}


--------------------
// ...
Co nieco o mnie ;)
Go to the top of the page
+Quote Post
mateuszpi
post
Post #3





Grupa: Zarejestrowani
Postów: 140
Pomógł: 0
Dołączył: 11.09.2006
Skąd: Jaworzno

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


albo ja nie rozumiem albo coś jest nie tak:
  1. <script type="text/javascript">
  2. <!--
  3.  
  4. // odczytywanie:
  5. window.onload = function()
  6. {
  7. var stan = odczytajCiastko(id_elementu);
  8. pokazUkryj(id_elementu);
  9. }
  10.  
  11. // zapisywanie:
  12. pokazUkryj = function(id)
  13. {
  14. var stan = (document.getElementById(id).style.display == "none");
  15. zapiszCiastko(id_elementu, stan);
  16. }
  17.  
  18.  
  19. function pokazUkryj(id)
  20. {
  21. document.getElementById(id).style.display = (document.getElementById(id).style.display == "none") ? "block" : "none";
  22. }
  23.  
  24. -->
  25.  


i teraz wogóle nie działa nic. nawet odkryć ukrytego tekstu się nie da
Go to the top of the page
+Quote Post
lord_t
post
Post #4





Grupa: Zarejestrowani
Postów: 603
Pomógł: 131
Dołączył: 24.07.2007
Skąd: Górny Śląsk

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


Nie działa bo kubarek nie podał Ci rozwiązania na tacy tylko podpowiedźsmile.gif nie masz funkcji odczytajCiastko i zapiszCiastko.


--------------------
Go to the top of the page
+Quote Post
mateuszpi
post
Post #5





Grupa: Zarejestrowani
Postów: 140
Pomógł: 0
Dołączył: 11.09.2006
Skąd: Jaworzno

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


poszukałem na google i po twoich poradch skombinowałem funkcję do odczytu i zapisu. wsadziłęm całość i nadal nic się nie da zrobić.

  1. <script type="text/javascript">
  2. <!--
  3.  
  4. function zapiszCiastko(nazwa, wartosc) {
  5. document.cookie = nazwa + "=" + escape(wartosc)
  6. }
  7.  
  8. function odczytajCiastko(nazwa) { //1
  9. if (document.cookie!="") { //2
  10. var toCookie=document.cookie.split("; "); //3
  11. for (i=0; i<toCookie.length; i++) { //4
  12. var nazwaCookie=toCookie[i].split("=")[0]; //5
  13. var wartoscCookie=toCookie[i].split("=")[1]; //6
  14. if (nazwaCookie==nazwa) return unescape(wartoscCookie) //7
  15. }
  16. }
  17. }
  18.  
  19.  
  20.  
  21. // odczytywanie:
  22. window.onload = function()
  23. {
  24. var stan = odczytajCiastko(id_elementu);
  25. pokazUkryj(id_elementu);
  26. }
  27.  
  28. // zapisywanie:
  29. pokazUkryj = function(id)
  30. {
  31. var stan = (document.getElementById(id).style.display == "none");
  32. zapiszCiastko(id_elementu, stan);
  33. }
  34.  
  35.  
  36. function pokazUkryj(id)
  37. {
  38. document.getElementById(id).style.display = (document.getElementById(id).style.display == "none") ? "block" : "none";
  39. }
  40.  
  41. -->
  42.  


czyba jednak musze poprosić o "tace" bo chyba nie dojde osobiście.
Go to the top of the page
+Quote Post
kubarek
post
Post #6





Grupa: Zarejestrowani
Postów: 43
Pomógł: 0
Dołączył: 19.02.2007

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


Jeszcze teraz nad tym myślałem trochę, więc wygląda nieco inaczej, niż przedstawiłem w pierwszym poście. A więc tak ( zdania nie rozpoczyna się od 'a więc' winksmiley.jpg ):
Tworzysz funkcję pokazUkryj, z parametrem id, itd:
Kod
function pokazUkryj(id)
{
    var stan = (document.getElementById(id).style.display == "none");
    document.getElementById(id).style.display = stan ? "block" : "none";
    zapiszCiastko(id, !stan);
}

Pobiera stan elementu, czyli sprawdza czy element jest niewidoczny. Następnie zmienia ten stan i zapisuje już zmieniony do cookies ( stąd ten wykrzyknik w funkcji zapiszCiastko). Czyli zapisuje true, jeśli element nie jest widoczny albo false, jeśli jest widoczny. Odczytywanie wygląda zaś tak. Tworzysz funkcję, która wczytuje zapisany stan i na jego podstawie decyduje, czy element ma być widoczny, czy ukryty.
Kod
function odczytajStan(id){
    var stan = odczytajCiastko(id);
    document.getElementById(id).style.display = stan ? "block" : "none";
}


No i funkcja ładująca się na starcie:
Kod
window.onload = function(){
   var id = "id_elementu_ktory_ma_miec_wczytany_stan_na_starcie";
   odczytajStan(id);
}

Jeśli jest wiele takich elementów, to no problem, użyj tablicy:
Kod
window.onload = function(){
   var elementy = ["elem1", "elem2", "elem3"];
   for (var i = 0; i < elementy.length; i++) odczytajStan(elementy[i]);
}

Pisane z palca, więc mogą być pewne błędy, ale ogólnie idea jest właśnie taka smile.gif

Ten post edytował kubarek 6.04.2008, 20:28:04


--------------------
// ...
Co nieco o mnie ;)
Go to the top of the page
+Quote Post
Fixer
post
Post #7





Grupa: Zarejestrowani
Postów: 123
Pomógł: 0
Dołączył: 24.10.2004
Skąd: TG

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


Przedstawiam gotowiec...



Zalety:
-zapisywanie/odczytywanie statusu przez cookie
-łatwa modyfikacja wyglądu stylem css
-szybka integracja ze stroną
-kompatybilność z przeglądarkami IE, FF

  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-2" />
  4.  
  5. <title>Show/Hide + cookie</title>
  6.  
  7. <style type="text/css">
  8. <!--
  9. body,td,th {
  10. font-family: Verdana, Arial, Helvetica, sans-serif;
  11. color: #000000;
  12. }
  13. body {
  14. background-color: #FFFFFF;
  15. margin-left: 10px;
  16. margin-top: 10px;
  17. margin-right: 10px;
  18. margin-bottom: 10px;
  19. }
  20. a {
  21. font-family: Verdana, Arial, Helvetica, sans-serif;
  22. font-size: 12px;
  23. color: #FFFFFF;
  24. }
  25. a:link {
  26. text-decoration: none;
  27. }
  28. a:visited {
  29. text-decoration: none;
  30. color: #FFFFFF;
  31. }
  32. a:hover {
  33. text-decoration: none;
  34. color: #FFFFFF;
  35. }
  36. a:active {
  37. text-decoration: none;
  38. color: #FFFFFF;
  39. }
  40. .menu_naglowek {
  41. background-color: #820000;
  42.  
  43. PADDING-LEFT: 8px;
  44. PADDING-RIGHT: 8px;
  45. PADDING-TOP: 2px;
  46. PADDING-BOTTOM: 2px;
  47.  
  48. FONT-FAMILY: Verdana, Tahoma;
  49. text-align: center;
  50. FONT-SIZE: 10px;
  51. FONT-WEIGHT: bold;
  52. color: #FFFFFF;
  53. height: 18px;
  54. cursor: pointer;
  55. }
  56.  
  57. .menu_tresc {
  58. background-color: #FFFFFF;
  59.  
  60. BORDER-LEFT: 1px solid #820000;
  61. BORDER-RIGHT: 1px solid #820000;
  62. BORDER-TOP: 0px solid;
  63. BORDER-BOTTOM: 1px solid #820000;
  64.  
  65. PADDING-LEFT: 8px;
  66. PADDING-RIGHT: 8px;
  67. PADDING-TOP: 5px;
  68. PADDING-BOTTOM: 5px;
  69.  
  70. FONT-FAMILY: Verdana, Tahoma;
  71. FONT-SIZE: 10px;
  72. COLOR: #000000;
  73. }
  74. -->
  75.  
  76. <script language="javascript">
  77. function init()
  78. {
  79. var cookie = getCookie('collapse_obj');
  80. if(cookie)
  81. {
  82. var values = cookie.split(',');
  83.  
  84. for(var i = 0; i < values.length; i++)
  85. {
  86. var itm = getItem(values[i]);
  87.  
  88. if(itm)
  89. itm.style.display = 'none';
  90. }
  91. }
  92. }
  93.  
  94. function makeCookie(name, value)
  95. {
  96. var cookie = name + '=' + escape(value) + ';';
  97. document.cookie = cookie;
  98. }
  99.  
  100. function getCookie(name)
  101. {
  102. if(document.cookie == '')
  103. return false;
  104.  
  105. var firstPos;
  106. var lastPos;
  107. var cookie = document.cookie;
  108.  
  109. firstPos = cookie.indexOf(name);
  110.  
  111. if(firstPos != -1)
  112. {
  113. firstPos += name.length + 1;
  114. lastPos = cookie.indexOf(';', firstPos);
  115.  
  116. if(lastPos == -1)
  117. lastPos = cookie.length;
  118.  
  119. return unescape(cookie.substring(firstPos, lastPos));
  120. }
  121.  
  122. else
  123. return false;
  124. }
  125.  
  126. function getItem(id)
  127. {
  128. var itm = false;
  129. if(document.getElementById)
  130. itm = document.getElementById(id);
  131. else if(document.all)
  132. itm = document.all[id];
  133. else if(document.layers)
  134. itm = document.layers[id];
  135.  
  136. return itm;
  137. }
  138.  
  139. function ShowHide(id)
  140. {
  141. itm = getItem(id);
  142.  
  143. if(!itm)
  144. return false;
  145.  
  146. if(itm.style.display == 'none')
  147. itm.style.display = '';
  148. else
  149. itm.style.display = 'none';
  150.  
  151. ////////////////////
  152.  
  153. cookie = getCookie('collapse_obj');
  154. values = new Array();
  155. newval = new Array();
  156. add = 1;
  157.  
  158. if(cookie)
  159. {
  160. values = cookie.split(',');
  161.  
  162. for(var i = 0; i < values.length; i++)
  163. {
  164. if(values[i] == id)
  165. add = 0;
  166. else
  167. newval[newval.length] = values[i];
  168. }
  169. }
  170.  
  171. if(add)
  172. newval[newval.length] = id;
  173.  
  174. makeCookie('collapse_obj', newval.join(','));
  175.  
  176. return false;
  177. }
  178. </script>
  179.  
  180. </head>
  181.  
  182. <body onLoad="init()">
  183.  
  184. <table width="250" border="0" cellspacing="0" cellpadding="0">
  185. <tr>
  186. <td class="menu_naglowek" onclick="javascript:ShowHide('menu_1');"><a name="menu1" id="menu1">Menu1</a></td>
  187. </tr>
  188. <tr>
  189. <td class="menu_tresc">
  190.  
  191. <table width="100%" border="0" align="center" cellpadding="0" cellspacing="0" id="menu_1">
  192. <tr>
  193. <td height="20">nazwa1</td>
  194. </tr>
  195. <tr>
  196. <td height="20">nazwa2</td>
  197. </tr>
  198. </table>
  199.  
  200. </td>
  201. </tr>
  202.  
  203. <br />
  204. <table width="250" border="0" cellspacing="0" cellpadding="0">
  205. <tr>
  206. <td class="menu_naglowek" onclick="javascript:ShowHide('menu_2');"><a name="menu2" id="menu2">Menu2</a></td>
  207. </tr>
  208. <tr>
  209. <td class="menu_tresc">
  210.  
  211. <table width="100%" border="0" align="center" cellpadding="0" cellspacing="0" id="menu_2">
  212. <tr>
  213. <td height="20">nazwa1</td>
  214. </tr>
  215. <tr>
  216. <td height="20">nazwa2</td>
  217. </tr>
  218. </table>
  219.  
  220. </td>
  221. </tr>
  222.  
  223. </body>
  224. </html>


Jeśli chcemy aby przy pierwszym otwarciu przeglądarki jakiś fragment był domyślnie ukryty to nieco modyfikujemy kod:
zamiast
  1. <table width="100%" border="0" align="center" cellpadding="0" cellspacing="0" id="menu_1">

dajemy
  1. <table width="100%" border="0" align="center" cellpadding="0" cellspacing="0" id="menu_1" style="display: none;">


Dodatkowo jak ktoś potrzebuje zastosować tutaj elemnt <DIV> zamiast id="nazwa"
to może to zrobic tak:
  1. <div id="nazwa" style="display: block;"> (zamiast block można też wpisać none dla zawartości ukrytej domyślnie)
  2. zawartość html która będzie się pokazywać/ukrywać
  3. </div>


Z uwagi na to że na JS nie znam się za bardzo dlatego mam jeszcze do was jedno pytanie, jak przerobić tą fukcję JS powyżej, żeby można było dodać kolejny parametr mówiący o tym czy box ma być domyślnie zamknięty/otwarty po pierwszym otwarciu strony?

ShowHide('menu_2', 'true'); //jak true to otwarty a jak false to domyślnie zamknięty

PS. zmiany powinny nastąpić we funkcji init() i ShowHide() i jeśli mamy parametr false to tam gdzie było none dajemy block a tam gdzie block dajemy none

Dla kogos kto siedzi w JS to będzie prosta przeróbka, pomożecie zatem?

Ten post edytował Fixer 16.05.2008, 19:37:18


--------------------
Go to the top of the page
+Quote Post
DawPi
post
Post #8





Grupa: Zarejestrowani
Postów: 39
Pomógł: 1
Dołączył: 6.05.2007
Skąd: Kraków

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


Witam,
podczepię się pod wątek.

Kod usera Fixer działa, jednak nie mam żadnej styczności z JS, a chciałbym poznać sposób na mój problem:

otóż będąc w jakimś miejscu strony innym niż sama góra ( suwak po prawej przesunięty maksymalnie w górę ) po kliknięciu na link:
Kod
<tr><td class="row1" colspan="2" valign="bottom"><b>Menu</b> <a href="#" onclick="javascript:ShowHide('menu__1');"><b>Menu</b></a>( {$who_o} )  <div id="menu__1" style="display: none;"><br />zawartosc</div>  </td></tr>


strona 'zwija' się na samą górę. Można to porównać do naciśnięcia buttona na tym forum.

Chciałbym by rozwinięcie/zwinięcie nie powodowało zmiany położenia na stronie.

Dzięki za wszystkie sugestie.


--------------------
intermedia - profesjonalne rozwiązania Invision Power Board
Go to the top of the page
+Quote Post
tommy4
post
Post #9





Grupa: Zarejestrowani
Postów: 288
Pomógł: 12
Dołączył: 2.12.2005

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


Spowodowane jest to parametrem href="#".

  1. <tr><td class="row1" colspan="2" valign="bottom"><b>Menu</b> <a href="#" onclick="javascript:ShowHide('menu__1'); return false;"><b>Menu</b></a>( {$who_o} ) <div id="menu__1" style="display: none;"><br />zawartosc</div> </td></tr>


Musisz dodać return false, wtedy kliknięcie na link się nie wykona.

BTW:
Kod
onclick="javascript:ShowHide('menu__1');
=>
Kod
onclick="ShowHide('menu__1');


Po co mówić przeglądarce, że onclick trzeba wykonać przez javascript, skoro ona to wie? Użycie "java script:" jest uzasadnione, np. gdy

  1. <a href="javascript:alert('kliknalem');">asdf</a>
, ale nawet tak się nie robi. winksmiley.jpg

Ten post edytował tommy4 23.09.2008, 08:01:00
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 22.08.2025 - 04:10