2010-03-13 13 views
10

użyłem kodu:Jquery wartość zwracana

jQuery.fn.MyFunction = function(){ 
return this.each(function() { 
    attributes = "test"; 

    return attributes; 
});} 

Ale gdy zgłoszę

var1 = $(this).MyFunction();alert(var1); 

Dostałem [object], ale nie "test".

Jak umożliwić wtyczce jquery zwrócić jakąś wartość?

+0

dobrze, to po prostu powrót funkcji jest przekazywana do 'each' zamiast wracać swój' MyFunction' rozszerzenie. – Shea

Odpowiedz

8

jQuery wtyczki są zazwyczaj przeznaczone do powrotu obiektu jQuery, dzięki czemu można metoda łańcucha nazywa:

jQuery("test").method1().method2() ... 

Jeśli chcesz powrócić coś innego, należy użyć następującej składni:


jQuery.fn.extend({ 
    myFunction: function(args) { 
      attributes = "test"; 

      return attributes; 
    } 
}); 

lub uzyskaj dostęp za pośrednictwem indeksu, korzystając z [].

+0

Dzięki, składnia "jQuery.fn.extend" pomaga mi. P.S. W odpowiedzi zapomniałeś "fn". – Anton

+0

Dobry chwyt, dzięki! Patrzyłem na przykład z isArray w kodzie źródłowym jQuery, ale zapomniałem, że isArray to "statyczne" wywołanie, które nie wymagałoby fn. –

1

Wierzę, że jQuery zwraca obiekt, dzięki czemu można zachować łańcuchowość różnych funkcji.

0

Hmm, może użyć

var1 = $(this)[0].MyFunction();alert(var1); 

Ale nie jestem pewien, czy to jest to, co chcesz lub jeśli kod działa w ogóle. Co próbujesz osiągnąć? Czy na pewno chcesz zadzwonić pod numer this.each()?

Tak jak powiedzieli inni, jQuery w większości przypadków zwraca obiekty jQuery, a dostęp do rzeczywistego obiektu można uzyskać za pomocą metody indekcyjnej [] lub get.

+0

Nie wiesz, że możesz użyć metody get do tego - czy mógłbyś wysłać przykład? –

+0

Na przykład możesz napisać '$ (". SomeClass "). Get (0);'.Czy też się tutaj mylę? – mnemosyn

6

Oto po raz kolejny kod:

jQuery.fn.MyFunction = function() { #1 
    return this.each(function() { #2 
     return "abc";     #3 
    });        #4 
};         #5 

Teraz sprawdźmy, co zrobić każdy wiersz.

  1. Deklarujemy właściwość MyFunction, która jest funkcją dla każdego obiektu jQuery.
  2. Ta linia jest pierwsza i ostatnia instrukcja z jQuery.MyFunction(). Mamy return wynik this.each(), a nie wynik funkcji lambda (używany jako argument dla jQuery.each()). I this.each() zwraca się, więc końcowy wynik jest, że otrzymasz obiekt jQuery zwrócony.

Linie 3-5 nie są w rzeczywistości ważne.

Wystarczy rozważyć te dwa przykłady:

jQuery.fn.MyFunction = function() { 
    return this.each(function() { 
     return "abc"; 
    }); 
}; 

jQuery.fn.AnotherFunction = function() { 
    return "Hello World"; 
}; 

var MyFunctionResult = $(document).MyFunction(); 
var AnotherFunctionResult = $(document).AnotherFunction(); 

alert(MyFunctionResult); 
alert(AnotherFunctionResult); 
+0

Twój drugi przykład powinien być zaakceptowaną odpowiedzią, ponieważ jest bardziej zwięzły i przejrzysty. –

Powiązane problemy