2011-09-10 21 views
6

sto lottando per restituire una matrice da una chiamata di funzione - codice qui sotto:jQuery + restituire una matrice da una funzione

///////////// 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]); 

Quando sono a segnalare a positionData ottengo [oggetto] [oggetto] e quindi non definita.

Consigli?

risposta

6

alert(positionData[width]);

Questo viene segnalata una chiave nella positionData, e usando la variabile width come chiave. Non hai definito una variabile denominata width, quindi è essenzialmente la ricerca di positionData[undefined]. Quello che vuoi è positionData.width o positionData['width'], ma non c'è motivo per le citazioni qui.

Le virgolette sarebbero necessarie solo se si dispone di una chiave con caratteri non alfanumerici. positionData['some-key'] funziona, ma positionData.some-key è un errore di sintassi, poiché le variabili non possono contenere -.

Inoltre, il codice DOVREBBE essere in errore, perché la larghezza non è definita da nessuna parte. Sono preoccupato che tu abbia una variabile width definita da qualche parte nel tuo codice.

1

Questo perché positionData è un oggetto (l'oggetto si torna da spotJoinPosition) e la variabile width è indefinito la variabile width contiene un valore che non è presente sull'oggetto.

Si desidera positionData.width o positionData['width'].

See the MDN docs on member operators.

+1

realtà , la ragione per cui 'positionData [width]' sta emettendo 'undefined' è perché' width' * è * definito da qualche parte, ma il valore di 'width' non è una chiave valida nel suo oggetto 'positionData'. – Chris

0

Prova:

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

Se si vuole in realtà una funzione generica che restituisce un array e non un object, si potrebbe desiderare di rivedere la seguente:

///////////// 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 
Problemi correlati