2011-09-10 4 views
6

Je me bats pour retourner un tableau à partir d'un appel de fonction - le code ci-dessous:JQUERY + Retourne un tableau à partir d'une fonction

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

Quand j'alerter positionData je reçois [objet] [objet] et non défini.

Conseil?

Répondre

6

alert(positionData[width]);

C'est alertent une clé dans positionData, et en utilisant la variable width la clé. Vous n'avez pas défini de variable appelée width, donc il s'agit essentiellement de positionData[undefined]. Ce que vous voulez est positionData.width, ou positionData['width'], mais il n'y a aucune raison pour les citations ici. Les guillemets ne sont requis que si vous avez une clé avec des caractères non alphanumériques. positionData['some-key'] fonctionne, mais positionData.some-key est une erreur de syntaxe, car les variables ne peuvent pas contenir -.

En outre, votre code DEVRAIT être erroné, car la largeur n'est définie nulle part. Je suis inquiet que vous ayez une variable width définie globalement quelque part dans votre code.

1

C'est parce que positionData est un objet (l'objet que vous revenez de spotJoinPosition) et la width variable est non défini la width variable contient une valeur qui ne figure pas sur l'objet. Vous souhaitez positionData.width ou positionData['width'].

See the MDN docs on member operators.

+1

fait , la raison pour laquelle 'positionData [width]' sort en sortie 'undefined' est parce que' width' * est * défini quelque part, mais la valeur de 'width' n'est pas une clé valide dans son objet 'positionData'. – Chris

0

Essayez:

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

Si vous voulez vraiment une fonction générique qui renvoie une array et non un object, vous voudrez peut-être revoir à ce qui suit:

///////////// 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 
Questions connexes