2010-03-13 18 views
10

benutzte ich einen Code:JQuery Rückgabewert

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

    return attributes; 
});} 

Aber wenn ich

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

nennen bekam ich eine [object], aber nicht die "test".

Wie kann jquery Plugin einen gewissen Wert zurückgeben?

+0

gut, Sie waren einfach die Funktion Rückkehr eher 'each' geben wird als Ihre' MyFunction' Erweiterung zurück. – Shea

Antwort

8

jQuery Plugins sind in der Regel ein jQuery-Objekt zurückgeben entworfen, so können Sie Kette Methode aufruft:

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

Wenn Sie etwas anderes zurückkehren möchten, verwenden Sie die folgende Syntax:


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

      return attributes; 
    } 
}); 

oder Greifen Sie über den Index darauf zu, indem Sie [] verwenden.

+0

Danke, Syntax "jQuery.fn.extend" hilft mir. P.S. Du hast "Fn" als Antwort vergessen. – Anton

+0

Guter Fang, danke! Ich habe das isArray-Beispiel im jQuery-Quellcode angeschaut, aber vergessen, dass isArray ein "statischer" Aufruf ist, der das fn nicht benötigt. –

1

Ich glaube, dass jQuery das Objekt zurückgibt, so dass Sie die Kettenfähigkeit der verschiedenen Funktionen beibehalten können.

0

Hmm, verwenden vielleicht

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

Aber ich bin nicht sicher, ob das ist, was Sie wollen oder wenn Ihr Code überhaupt funktioniert. Was versuchst du zu erreichen? Möchten Sie wirklich this.each() anrufen?

Wie bereits erwähnt, gibt jQuery in den meisten Fällen jQuery-Objekte zurück, und der Zugriff auf das tatsächliche Objekt kann mit einem Indexer [] oder der get-Methode erfolgen.

+0

Wusste nicht, dass Sie die get-Methode dafür verwenden könnten - könnten Sie bitte ein Beispiel posten? –

+0

Zum Beispiel könnten Sie '$ (". SomeClass "). Get (0);'.Oder irre ich mich hier? – mnemosyn

6

Hier ist wieder der Code:

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

Nun wollen wir überprüfen, was jede Zeile tun.

  1. Wir deklarieren Eigenschaft MyFunction, die eine Funktion für jedes jQuery-Objekt ist.
  2. Diese Zeile ist die erste und letzte Anweisung von jQuery.MyFunction(). Wir zurück das Ergebnis this.each(), nicht das Ergebnis der Lambda-Funktion (als Argument für jQuery.each() verwendet). Und this.each() gibt sich selbst zurück, so dass das endgültige Ergebnis ist, dass Sie das jQuery-Objekt zurückgeben.

Die Zeilen 3-5 sind in der Tat nicht wichtig.

Gerade diese beiden Beispiele betrachten:

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

Ihr zweites Beispiel sollte die akzeptierte Antwort sein, da es prägnanter und klarer ist. –