Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [jQuery] wywoływanie callbacka dla tego samego obiektu
Master Pain
post 8.09.2009, 08:43:57
Post #1





Grupa: Zarejestrowani
Postów: 71
Pomógł: 1
Dołączył: 5.04.2007
Skąd: Jarocin

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


Witam

Mam taki kod:
  1. function klasa() {
  2. this.loop = 0;
  3. this.object = $('#jakisObiekt');
  4.  
  5. this.moveUp = function() {
  6. this.object.animate({top : '+=100px'}, 1000, 'linear', function() {
  7. //tutaj jest błąd, po prostu nie wiem jak to wywołać.
  8. if(this.loop < 100) {
  9. this.moveDown();
  10. }
  11. });
  12. }
  13.  
  14. this.moveDown = function() {
  15. this.object.animate({top : '-=100px'}, 1000, 'linear', function() {
  16. if(this.loop < 100) {
  17. this.moveUp();
  18. }
  19. });
  20. }
  21. }


I wywołuję to w ten sposób:
  1. var k = new klasa();
  2. k.moveUp();


Wiem, że nie działa (komentarz w kodzie).
Chcę osiągnąć powtarzającą się, do uzyskania wartości 100 dla zmiennej loop, animację (góra/dół) na obiekcie. Tylko, że FireBug wywala błąd, że nie ma takiej funkcji jak this.moveUp(). Wiem też, że nie jest dobrze sprawdzany warunek:
  1. if(this.loop < 100) { ... }

Wiem, że 'this' jest źle użyte, bo odwołuje się do elementu DOM '#jakisObiekt', a chcę się odwołać do obiektu klasy, żeby wywołać metodę.
Czy ktoś wie jak temu zaradzić?

Pozdrawiam!

Ten post edytował Master Pain 8.09.2009, 08:58:11
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 11)
nospor
post 8.09.2009, 08:52:58
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




this.moveUp() - to jest wywolanie metody a nie jej deklaracja. Najpierw musi byc jej deklaracja by moc ją wogole wykonac.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Master Pain
post 8.09.2009, 08:57:49
Post #3





Grupa: Zarejestrowani
Postów: 71
Pomógł: 1
Dołączył: 5.04.2007
Skąd: Jarocin

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


Przepraszam, źle podałem przykładowy kod, już poprawiam.
Go to the top of the page
+Quote Post
wookieb
post 8.09.2009, 09:21:30
Post #4





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




Ja bym zrobił mniej więcej w ten sposób
[JAVASCRIPT] pobierz, plaintext
  1. this.moveUp = function() {
  2. this.object.animate({top : '+=100px'}, 1000, 'linear', this.moveUpContinue);
  3. }
  4.  
  5. this.moveUpContinue = function()
  6. {
  7. if(this.loop < 100) {
  8. this.moveDown();
  9. }
  10.  
  11. }
[JAVASCRIPT] pobierz, plaintext


Ten post edytował wookieb 8.09.2009, 09:21:47


--------------------
Go to the top of the page
+Quote Post
Master Pain
post 8.09.2009, 10:53:12
Post #5





Grupa: Zarejestrowani
Postów: 71
Pomógł: 1
Dołączył: 5.04.2007
Skąd: Jarocin

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


Komunikat z FireBug'a: Błąd: this.moveDown is not a function

Metoda nie jest dostępna z tego poziomu? Zauważyłem też, że nie mogę sprawdzić warunku odnośnie loop:
  1. if(this.loop < 100)

Zmienna ta nie jest tam widziana. Coś zrobiłem nie tak?
Kiedy zrobię:
  1. alert(this.loop);
  2. if(this.loop < 100) {
  3. this.moveDown();
  4. }

alert pokazuje 'undefined'. Czy coś źle zadeklarowałem? Natomiast alert w metodzie moveDown pokazuje aktualną wartość zmiennej.

Ten post edytował Master Pain 8.09.2009, 10:57:57
Go to the top of the page
+Quote Post
nospor
post 8.09.2009, 10:57:07
Post #6





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




THIS w funkcji jQuery odnosi sie do obiektu jQuery a nie do klasy.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Master Pain
post 8.09.2009, 11:02:51
Post #7





Grupa: Zarejestrowani
Postów: 71
Pomógł: 1
Dołączył: 5.04.2007
Skąd: Jarocin

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


nospor, hmm... to jak to rozwiązać? Chcę to zrobić obiektowo, ale też będę wykorzystywał funkcjonalność jQuery.
Go to the top of the page
+Quote Post
wookieb
post 8.09.2009, 11:11:45
Post #8





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 klasa()
  2. {
  3. var obj = new Object();
  4. obj.object = $('#test');
  5. obj.loop = 100;
  6.  
  7. obj.moveUp = function()
  8. {
  9. this.object.animate({width: 100}, 1000, 'linear', obj.moveUpContinue);
  10. }
  11.  
  12. obj.moveUpContinue = function()
  13. {
  14. alert(obj.loop);
  15. }
  16. return obj;
  17. }
  18.  
  19. var obj=klasa();
  20. obj.moveUp();
[JAVASCRIPT] pobierz, plaintext


Ten post edytował wookieb 8.09.2009, 11:11:55


--------------------
Go to the top of the page
+Quote Post
nospor
post 8.09.2009, 11:17:17
Post #9





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




mozna tez inaczej:
Kod
function klasa() {
   this.loop = 0;
   this.object = $('#jakisObiekt');
   var thisObj =  this;
   this.moveUp = function() {
      
      this.object.animate({top : '+=100px'}, 1000, 'linear', function(ala) {
     //tutaj jest błąd, po prostu nie wiem jak to wywołać.
         if(thisObj.loop < 100) {
            thisObj.moveDown();
         }
      });
   }

   this.moveDown = function() {
      
      this.object.animate({top : '-=100px'}, 1000, 'linear', function() {
         if(thisObj.loop < 100) {
        thisObj.moveUp();
         }
      });
   }
}
aczkolwiek idea podobna
smile.gif


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Master Pain
post 8.09.2009, 11:23:48
Post #10





Grupa: Zarejestrowani
Postów: 71
Pomógł: 1
Dołączył: 5.04.2007
Skąd: Jarocin

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


wookieweb, nospor - bardzo Wam dziękuję! nospor, wookieweb był szybszy no i trochę jego zapis mi bardziej wizualnie odpowiada smile.gif

Pozdrawiam!

Ten post edytował Master Pain 8.09.2009, 11:24:13
Go to the top of the page
+Quote Post
nospor
post 8.09.2009, 11:25:22
Post #11





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
nosor, wookieweb był szybszy
mi to tam zwisa i powiewa... chce jedynie zaznaczyc ze podal ci dopiero poprawną odpowiedź po moich podpowiedziach. Do póki nie napisalem co i jak to podawal ci zle kody winksmiley.jpg


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Master Pain
post 8.09.2009, 11:27:16
Post #12





Grupa: Zarejestrowani
Postów: 71
Pomógł: 1
Dołączył: 5.04.2007
Skąd: Jarocin

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


hmm racja, już klikam w odpowiedni przycisk smile.gif
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 Wersja Lo-Fi Aktualny czas: 14.08.2025 - 08:44