Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Zmienna data is undefined
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
finito
W kodzie ze strony oraz w moim występuje ten sam błąd. Chodzi o sytuację, w której w index.html moją publiczną metodę wywołuję w ten sposób: changeColor('swapColors'); Parser krzyczy:"data is undefined" w 18 linii. i nie wiem, czy to jest kwestia tego, że gdzieś ta data musi być zadeklarowana? a może chodzi o to, że data nie jest zainicjowana tzn. nie ma wartości. Tak czy siak, stanąłem przez to w miejscu.

  1. (function($){
  2. $.fn.changeColor = function(options)
  3. {
  4.  
  5. function onClick(event){
  6. //cialo metody prywatnej
  7. $this = $(this);
  8. data = $this.data('changeColor');
  9. data.first = !data.first;
  10. $this.css("backgroundColor", data.first ? data.colorSecond : data.colorFirst);
  11. return true;
  12. }
  13. //metody publiczne
  14. var methods = {
  15. swapColors: function(){
  16. $this=$(this);
  17. data = $this.data('changeColor');
  18. tmp = data.colorSecond;
  19. data.colorSecond = data.colorFirst;
  20. data.colorFirst = tmp;
  21. },
  22. destroy: function(){
  23. //destruktor
  24. $this = $(this);
  25. $this.unbind("click");
  26. $this.css("background-color","");
  27. $this.removeData("changeColor");
  28. }
  29. };
  30. return this.each(function(){
  31. if(methods[options])
  32. {
  33. return methods[options].apply(this,arguments);
  34. }
  35. else if (typeof options === 'object' || ! options){
  36. //parametry pluginu
  37. var settings = $.extend({
  38. colorFirst:'Red',
  39. colorSecond:'Green'
  40. },options);
  41.  
  42. $this = $(this);
  43. data = $this.data('changeColor');
  44. if (!data)
  45. {
  46. data = $this.data('changeColor',settings);
  47. $this.bind("click",onClick);
  48. }
  49. $this.css("background-color",settings.colorFirst);
  50. data.first=true;
  51. return;
  52. }
  53. else{
  54. //bład
  55. $.error('changeColor: no method: '+ options);
  56. }
  57.  
  58.  
  59.  
  60. });
  61.  
  62. }
  63. })(jQuery);
PrinceOfPersia
Cytat
nie wiem, czy to jest kwestia tego, że gdzieś ta data musi być zadeklarowana?

Tak, w twoim wypadku najlepiej zadeklarować ją na początku samowywołującej się funkcji:
[JAVASCRIPT] pobierz, plaintext
  1. (function($){
  2. // WSTAW
  3. var data = // TUTAJ WSTAW WARTOSC POCZATKOWOA ZMIENNEJ, ewentualnie zrob var data; bez znaku rownosci
[JAVASCRIPT] pobierz, plaintext

generalnie w JavaScript zmienne trzeba gdzieś zadeklarować. Jeśli ich nie zadeklarujesz, to zmienne robią się globalne, albo idzie błąd(jeśli próbujesz odczytac zmienną, której nie ma).

Możliwe też, że mimo deklaracji coś ci nie będzie działać, bo gdzieś coś źle inicjalizujesz.
finito
Niestety próbowałem już tego. Próbowałem deklarować data oraz tmp w różnych miejscach i nawet gdy deklaruje na samym początku samowywołującej się funkcji, to i tak wyskakuje ten błąd. To się dzieje też w oryginale, który hulał aż dopisałem w index.html: changeColors('swapColors');. Cała reszta kodu jest okej, więc nie wiem już o co chodzi.

Cytat(PrinceOfPersia @ 11.05.2014, 15:42:44 ) *
Tak, w twoim wypadku najlepiej zadeklarować ją na początku samowywołującej się funkcji:
[JAVASCRIPT] pobierz, plaintext
  1. (function($){
  2. // WSTAW
  3. var data = // TUTAJ WSTAW WARTOSC POCZATKOWOA ZMIENNEJ, ewentualnie zrob var data; bez znaku rownosci
[JAVASCRIPT] pobierz, plaintext

generalnie w JavaScript zmienne trzeba gdzieś zadeklarować. Jeśli ich nie zadeklarujesz, to zmienne robią się globalne, albo idzie błąd(jeśli próbujesz odczytac zmienną, której nie ma).

Możliwe też, że mimo deklaracji coś ci nie będzie działać, bo gdzieś coś źle inicjalizujesz.

Damonsson
[JAVASCRIPT] pobierz, plaintext
  1. tmp = data.colorSecond;
  2. data.colorSecond = data.colorFirst;
  3. data.colorFirst = tmp;
[JAVASCRIPT] pobierz, plaintext


A możesz powiedzieć, co te 3 linijki mają niby robić?
finito
Cytat(Damonsson @ 11.05.2014, 16:06:37 ) *
[JAVASCRIPT] pobierz, plaintext
  1. tmp = data.colorSecond;
  2. data.colorSecond = data.colorFirst;
  3. data.colorFirst = tmp;
[JAVASCRIPT] pobierz, plaintext


A możesz powiedzieć, co te 3 linijki mają niby robić?


Zamiana kolejnością koloru tł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.