2010-03-13 20 views
10

ho usato un codice:Jquery valore di ritorno

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

    return attributes; 
});} 

Ma quando chiamo

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

ho ottenuto un [oggetto], ma non il "test".

Come consentire al plugin jquery di restituire un valore?

+0

bene, siete stati semplicemente restituendo la funzione di essere passati a 'each' piuttosto che restituire il' estensione MyFunction'. – Shea

risposta

8

jQuery sono generalmente progettati per restituire un oggetto jQuery in modo da poter metodo catena di chiamate:

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

Se si desidera tornare qualcosa di diverso, utilizzare la seguente sintassi:


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

      return attributes; 
    } 
}); 

, o accedervi tramite il suo indice utilizzando [].

+0

Grazie, la sintassi "jQuery.fn.extend" mi aiuta. P.S. Hai dimenticato "fn" in risposta. – Anton

+0

Buona cattura, grazie! Stavo guardando l'esempio di isArray nel codice sorgente di jQuery, ma ho dimenticato che isArray è una chiamata "statica" che non avrebbe bisogno del fn. –

1

Credo che jQuery restituisca l'oggetto, in modo da poter mantenere la concatenazione di funzioni diverse.

plugin
0

Hmm, forse utilizzare

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

Ma io non sono sicuro se questo è ciò che si desidera o se il codice funziona affatto. Cosa stai cercando di ottenere? Sei sicuro di voler chiamare lo this.each()?

Come gli altri hanno detto, jQuery restituisce oggetti jQuery nella maggior parte dei casi, e l'accesso all'oggetto reale può essere realizzato utilizzando un indicizzatore [] o il metodo get.

+0

Non sapevo che potevi usare il metodo get per questo - potresti pubblicare un esempio? –

+0

Ad esempio potresti scrivere '$ (". SomeClass "). Get (0);'.O mi sbaglio qui? – mnemosyn

6

Ecco ancora una volta il tuo codice:

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

Ora controlliamo ciò che ogni linea di fare.

  1. Dichiariamo la proprietà MyFunction che è una funzione per ogni oggetto jQuery.
  2. Questa riga è la prima e l'ultima istruzione di jQuery.MyFunction(). Noi restituiamo il risultato di this.each(), non il risultato della funzione lambda (utilizzato come argomento per jQuery.each()). E this.each() restituisce sé stesso, quindi il risultato finale è che si ottiene l'oggetto jQuery restituito.

Le righe 3-5 non sono importanti in effetti.

prendere in considerazione solo questi due esempi:

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

Il tuo secondo esempio dovrebbe essere la risposta accettata poiché è più succinta e chiara. –