Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Zmienna data is undefined
finito
post
Post #1





Grupa: Zarejestrowani
Postów: 110
Pomógł: 0
Dołączył: 16.12.2012

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


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);


Ten post edytował finito 11.05.2014, 13:40:34
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
PrinceOfPersia
post
Post #2





Grupa: Zarejestrowani
Postów: 717
Pomógł: 120
Dołączył: 18.04.2009

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


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





Grupa: Zarejestrowani
Postów: 110
Pomógł: 0
Dołączył: 16.12.2012

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


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.

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





Grupa: Zarejestrowani
Postów: 2 355
Pomógł: 533
Dołączył: 15.01.2010
Skąd: Bydgoszcz

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


[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ć?
Go to the top of the page
+Quote Post
finito
post
Post #5





Grupa: Zarejestrowani
Postów: 110
Pomógł: 0
Dołączył: 16.12.2012

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


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.
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: 22.08.2025 - 14:10