Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Powtarzające się zmienne
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
kwiateusz
Witam

Z nudów piszę sobie skrypcik (proszę zwrócić uwagę że uczę się js winksmiley.jpg) i powtarzaja mi sie zmienne w 2 funcjach i teraz pytanko do was jak zrobić aby to się nie powtarzało winksmiley.jpg Poniżej kod :

  1. function PokazUkryj()
  2. {
  3. var pasek=$('pasek');
  4. var tresc=$('tresc');
  5. var img= pasek.childNodes[0];
  6.  
  7. pasek=pasek.getElementsByTagName('span')[0];
  8.  
  9. if (tresc.style.display == 'block' || my_getcookie('hide')==0)
  10. {
  11. tresc.style.display='none';
  12. pasek.innerHTML='Pokaż';
  13. img.src='exp_minus.gif';
  14. my_setcookie('hide',1);
  15. }
  16. else
  17. {
  18. tresc.style.display='block';
  19. pasek.innerHTML='Schowaj';
  20. img.src='exp_plus.gif';
  21. my_setcookie('hide',0);
  22. }
  23. }
  24.  
  25.  
  26. function check()
  27. {
  28. if(my_getcookie('hide')==1)
  29. {
  30. var tresc=$('tresc');
  31. var pasek=$('pasek');
  32. var img= pasek.childNodes[0];
  33. img.src='exp_minus.gif';
  34. tresc.style.display='none';
  35. pasek.childNodes[1].innerHTML='Pokaż';
  36. }
  37. }


chodzi mi dokladnie o
  1. var tresc=$('tresc');
  2. var pasek=$('pasek');
  3. var img= pasek.childNodes[0];


Z góry dzięki za pomoc smile.gif
LBO
Przeanalizuj to:
  1. <script language="javascript">
  2. var zmienna = 'zmienna';
  3.  
  4. function function1() {
  5. alert('function1: ' + zmienna);
  6. };
  7.  
  8. function function2() {
  9. alert('function2: ' + zmienna);
  10. };
  11. function1();
  12. function2();
kwiateusz
właśnie tak prubowałem i co dziwne skrypt przestawał działać .... po prostu funkcje zmiennych nie widziały... albo znowu coś pokręciłem winksmiley.jpg
siemakuba
Generalnie zmienne w JS mają zasięg globalny. Wypunktuję co i jak, bo tak łatwiej:
- zmienna utworzona poza funkcją za pomocą var - globalna
- zmienna utworzona poza funkcją bez var - globalna
- zmienna utworzona wewnątrz funkcji bez var - globalna
- zmienna utworzona wewnątrz funkcji za pomocą var - lokalna dla funkcji

pozdr.
kwiateusz
Kod
var pasek=document.getElementById('pasek');
   var tresc=$('tresc');
   var img= pasek.childNodes[0];

function PokazUkryj()
{
   alert(pasek);
   alert(tresc);


zrobiłem tak i w alertach mam null :/
siemakuba
pod jaka przegladarka pracujesz? Polecam FF i konsole JavaScript.
Czy null to ogólne stwierdzenie, że nic nie pokazuje? JavaScript pod FF nie zrobi alerta na pustej wartości. Pod IE zdaje sie pokaze undefined.

A moze masz ten skrypt w HEAD wstawiony? Wtedy wykona sie jeszcze przed powstaniem drzewa DOM i nie bedzie dostepu do elementow.

Jak mozesz to pokaz wiecej kodu :)

pozdr.
kwiateusz
tak mam ff i konsolke i pokazuje pasek hasn no properities

null to nie ogólne stwierdzenie tylko pokazuje sie taki string w okienku od alertt...

owszem mam to w head, ale jak zmienne sa w funkcji to ładuje się ładnie a jak poza to już się wali...

  1. <script type="text/javascript">
  2. function $(id)
  3. {
  4. itm = null;
  5.  
  6. if (document.getElementById)
  7. {
  8. itm = document.getElementById(id);
  9. }
  10. else if (document.all)
  11. {
  12. itm = document.all[id];
  13. }
  14. else if (document.layers)
  15. {
  16. itm = document.layers[id];
  17. }
  18.  
  19. return itm;
  20. }
  21. function my_getcookie( name )
  22. {
  23. var cname = name + '=';
  24. var cpos = document.cookie.indexOf( cname );
  25.  
  26. if ( cpos != -1 )
  27. {
  28. cstart = cpos + cname.length;
  29. cend = document.cookie.indexOf(";", cstart);
  30.  
  31. if (cend == -1)
  32. {
  33. cend = document.cookie.length;
  34. }
  35.  
  36. return unescape( document.cookie.substring(cstart, cend) );
  37. }
  38.  
  39. return null;
  40. }
  41.  
  42. function my_setcookie( name, value)
  43. {
  44. var expire = "; expires=Wed, 1 Jan 2020 00:00:00 GMT";
  45.  
  46. document.cookie = name + "=" + value + expire + ';';
  47. }
  48.  
  49. var pasek=document.getElementById('pasek');
  50. var tresc=$('tresc');
  51. var img= pasek.childNodes[0];
  52.  
  53. function PokazUkryj()
  54. {
  55. alert(pasek);
  56. alert(tresc);
  57. pasek=pasek.getElementsByTagName('span')[0];
  58.  
  59. if (tresc.style.display == 'block' || my_getcookie('hide')==0)
  60. {
  61. tresc.style.display='none';
  62. pasek.innerHTML='Pokaż';
  63. img.src='exp_minus.gif';
  64. my_setcookie('hide',1);
  65. }
  66. else
  67. {
  68. tresc.style.display='block';
  69. pasek.innerHTML='Schowaj';
  70. img.src='exp_plus.gif';
  71. my_setcookie('hide',0);
  72. }
  73. }
  74.  
  75. function check()
  76. {
  77. if(my_getcookie('hide')==1)
  78. {
  79. var tresc=$('tresc');
  80. var pasek=$('pasek');
  81. var img= pasek.childNodes[0];
  82. img.src='exp_minus.gif';
  83. tresc.style.display='none';
  84. pasek.childNodes[1].innerHTML='Pokaż';
  85. }
  86. }
  87. -->
  88. </head>
  89. <body onload="check()">
  90. <div id="pasek" style="background: gray; height:20px; width:100%" ><img src='exp_plus.gif' onclick="java script:PokazUkryj()" style="float: right; padding:5px;" border='0' /><span>Schowaj</span><br /></div>
  91. <div id="tresc" style="background: red; display:block;">Test</div>
  92. </body>
  93. </body>
  94. </html>
siemakuba
no widzisz,
1. co sie dzieje kiedy masz zmienne w funkcji?
wartosc im zostanie przypisana dopiero kiedy wywolana zostanie funkcja. U ciebie wywolujesz fukcje check() za pomoca zdarzenia onload dla BODY == drzewo DOM jest zbudowane, zmienne prawidlowo otrzymuja wartosci.

2. co sie dzieje kiedy zmienne masz poza funkcja?
wartosc zostaje przypisana w momencie wykonania kodu. Jetesmy wiec w HEAD i probojemy przypisac zmiennej wartosc za pomoca getElementById. To sie nie uda, bo getElementById nie zna jeszcze struktury dokumentu. Pozna ja po zalkowitym zaladowaniu dokumentu do przegladarki.

3. robimy test.
wystaw zmienne poza funkcje, ale przypisz im jakas stala wartosc, np. jakis dowlony string. Wszystko powinno zadzialac, tzn. alert powinien wyswietlic wartosc tych zmiennych.

pozdr.
kwiateusz
heh winksmiley.jpg dzięki za pokazanie błędu więc musze to do body wsadzić aby zaradzić mojemu problemowi winksmiley.jpg jeszcze raz dzięki

@siemakuba jak już tak ładnie tłumaczysz to wyjaśniłbyś mi jak to jest z zasięgiem funkcji?

np. mam jakas funkcje w head pomiedzy <script /> i czy bedzie ona widoczna w body pomiędzy <script /> oraz czy wyżej wymieniona funkcja $() zadziała w zdarzeniach typu onclick ?
siemakuba
Funkcje masz widoczne wszędzie od momentu, kiedy zostaną załadowane - bez znaczenia czy będziesz chciał ich użyć w zdarzeniach typu onclick bezpośrednio w HTML, czy w innym kodzie gdzieś niżej na stronie. Najlepiej wszystkie ładować w HEAD i ewentualnie wywoływać co potrzeba przez zdarzenie onload dla BODY. A jeszcze lepiej trzymać w zewnętrznym pliku - będzie wszystko zcachowane przez przeglądarkę więc będzie ładowane przy pierwszym odwiedzeniu strony. Tu uwaga - podczas testowania może wyglądać na brak reakcji na zmiany w skrypcie, ale wystarczy zamiast F5 zrobić "twardy refresh" - Ctrl+R i będzie kul :)

pozdr.
kwiateusz
aha dzięki winksmiley.jpg muszę dokładniej książke studiować winksmiley.jpg biorę się za czytanie i testowanie. Dzięki za pomoc
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.