2010-03-13 16 views
10

he usado un código:Jquery valor de retorno

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

    return attributes; 
});} 

Pero cuando llamo

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

tengo una [objeto], pero no la "prueba".

¿Cómo permitir que el complemento jquery devuelva algún valor?

+0

así, simplemente estaban devolviendo la función que se pasa a 'each' en lugar de volver a su extensión' MyFunction'. – Shea

Respuesta

8

jQuery están generalmente diseñados para devolver un objeto jQuery para que pueda método de la cadena de llamadas:

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

Si desea volver otra cosa, utilice la siguiente sintaxis:


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

      return attributes; 
    } 
}); 

, o acceda a través de su índice usando [].

+0

Gracias, la sintaxis "jQuery.fn.extend" me ayuda. P.S. Olvidaste "fn" en respuesta. – Anton

+0

¡Buena captura, gracias! Estaba viendo el ejemplo de isArray en el código fuente de jQuery, pero olvidé que isArray es una llamada "estática" que no necesitaría el fn. –

1

Creo que jQuery devuelve el objeto, por lo que puede mantener el chainable de las diferentes funciones.

plugins
0

Hmm, tal vez usar

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

Pero no estoy seguro si eso es lo que quiere o si su código funciona en absoluto. ¿Qué estás intentando lograr? ¿Seguro que quieres llamar al this.each()?

Como dicen los otros, jQuery devuelve objetos jQuery en la mayoría de los casos, y el acceso al objeto real se puede lograr usando un indexador [] o el método get.

+0

No sabía que podría usar el método get para esto, ¿podría publicar un ejemplo? –

+0

Por ejemplo, podría escribir '$ (". SomeClass "). Get (0);'.¿O estoy equivocado aquí? – mnemosyn

6

Aquí está una vez más su código:

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

Ahora vamos a ver lo que hace cada línea.

  1. Declaramos la propiedad MyFunction que es una función para cada objeto jQuery.
  2. Esta línea es la primera y la última declaración de jQuery.MyFunction(). Nos devuelve el resultado de this.each(), no el resultado de lambda-function (utilizado como argumento para jQuery.each()). Y this.each() se devuelve por lo que el resultado final es que se devuelve el objeto jQuery.

Las líneas 3-5 no son importantes de hecho.

basta con considerar estos dos ejemplos:

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

Su segundo ejemplo debería ser la respuesta aceptada, ya que es más sucinto y claro. –