2011-09-10 16 views
6

から配列を返す私は、関数呼び出しからの配列を返すのに苦労しています - 以下のコード:私はpositionDataを警告するとき、私は、[オブジェクト] [オブジェクト]を取得し、未定義のjQueryの+は機能

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

を。

アドバイス?

答えて

6

alert(positionData[width]);

これはpositionDataにキーを警告、およびキーとして可変widthを使用しています。 widthという変数を定義していないので、基本的にはpositionData[undefined]を参照しています。あなたが欲しいのはpositionData.width、またはpositionData['width']ですが、ここに引用する理由はありません。

引用符は、英数字以外のキーがある場合にのみ必要です。 positionData['some-key']が機能しますが、変数には-を含めることができないため、positionData.some-keyは構文エラーです。

また、幅はどこにも定義されていないので、コードはエラーである必要があります(SHOULD)。あなたのコードのどこかに、グローバルに定義されたwidth変数があることに心配しています。 positionDataが変数widthが変数width定義されていないオブジェクト(あなたがspotJoinPositionから返すオブジェクト)とであるためだ

1

はオブジェクト上に存在しない値が含まれています。

positionData.widthまたはpositionData['width']が必要です。

See the MDN docs on member operators.

+1

実際positionData [width]が 'undefined'を出力しているのは、' width' *がどこかで定義されているが、 'width'の値が有効なキーではないからです彼の 'positionData'オブジェクトに格納されます。 – Chris

0

試してください:あなたが実際にarrayなくobjectを返す汎用的な機能が必要な場合

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

、あなたは次のように修正することがあります:

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