Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [jQuery] wywoływanie callbacka dla tego samego obiektu
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
Master Pain
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!
nospor
this.moveUp() - to jest wywolanie metody a nie jej deklaracja. Najpierw musi byc jej deklaracja by moc ją wogole wykonac.
Master Pain
Przepraszam, źle podałem przykładowy kod, już poprawiam.
wookieb
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
Master Pain
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.
nospor
THIS w funkcji jQuery odnosi sie do obiektu jQuery a nie do klasy.
Master Pain
nospor, hmm... to jak to rozwiązać? Chcę to zrobić obiektowo, ale też będę wykorzystywał funkcjonalność jQuery.
wookieb
[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
nospor
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
Master Pain
wookieweb, nospor - bardzo Wam dziękuję! nospor, wookieweb był szybszy no i trochę jego zapis mi bardziej wizualnie odpowiada smile.gif

Pozdrawiam!
nospor
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
Master Pain
hmm racja, już klikam w odpowiedni przycisk smile.gif
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.