2011-09-10 23 views
6

estoy luchando para devolver una matriz de una llamada de función - código de abajo:JQUERY + devolver una matriz desde una función

///////////// Generic Functions 
function spotJoinPosition() { 
    var pos = { 
       offset: $('div#spotJoinSite').offset(),         
       width: $('div#spotJoinSite').width(), 
       height: $('div#spotJoinSite').height() 
    } 
    return(pos); 
} 


     var positionData = spotJoinPosition(); 
     alert(positionData); 
     alert(positionData[width]); 

Cuando alerto positionData me sale [objeto] [objeto] y luego indefinido.

¿Asesoramiento?

Respuesta

6

alert(positionData[width]);

Esto está alertando una llave en positionData, y el uso de la variable width como la clave. No ha definido una variable llamada width, por lo que básicamente busca positionData[undefined]. Lo que quiere es positionData.width, o positionData['width'], pero no hay ninguna razón para hacer citas aquí.

Las comillas solo serían necesarias si tuviera una clave con caracteres no alfanuméricos. positionData['some-key'] funciona, pero positionData.some-key es un error de sintaxis, porque las variables no pueden tener - en ellas.

Además, su código DEBE estarse equivocando, porque el ancho no está definido en ninguna parte. Me preocupa que tenga una variable width definida globalmente en algún lugar de su código.

1

Eso es porque positionData es un objeto (el objeto que regrese de spotJoinPosition) y la variable no está definida width la variable width contiene un valor que no está presente en el objeto.

Quiere positionData.width o positionData['width'].

See the MDN docs on member operators.

+1

realidad , la razón por la que 'positionData [width]' está generando 'undefined' es porque' width' * está * definido en alguna parte, pero el valor de 'width' no es una clave válida en su objeto 'positionData'. – Chris

0

Probar:

alert(positionData.offset); 
    alert(positionData.width); 
    alert(positionData.height); 
0

Si usted quiere realmente una función genérica que devuelve un array y no un object, es posible que desee revisar la siguiente:

///////////// Generic Functions 
function spotJoinPosition(selector) { 
    var el = $(selector), 
     result = [el.offset(), el.width(), el.height()]; 

    return(result); 
} 

var positionArray = spotJoinPosition("#spotJoinSite"); 
alert(positionArray[0]); // outputs the position 
alert(positionArray[1]); // outputs the width 
Cuestiones relacionadas