0

jQueryデータ関数を使用して保存されたオブジェクトのプロパティを反復しようとしているときに、非常に奇妙なことに遭遇しました。

これが(例として)ものです:

wrapper.data( 'infos', {
    label: $('input[name*="label"]').val(),
    amount: $('input[name*="amount"]').val(),
    etc..
});

次に、次を使用して値を読み取ろうとします。

$.each( wrapper.data('infos'), function(k,v) {
  console.log(k + ' > ' + v);
});

そして、私は次のような美しい出力を取得します:

0 > undefined
1 > undefined
... 
239 > undefined

このオブジェクトをあたかも出力すれば、問題なくプロパティを読み取ることができます。それはどういうわけかjqueryキャッシングか何かに関連していますか?

4

1 に答える 1

0

オブジェクトにはlengthプロパティがあるため、少なくとも1.7.2では、配列であるかどうかが次の方法で決定されるため、配列として解釈されます。

length = obj.length,            
isObj = length === undefined || jQuery.isFunction( obj );

したがって、次のいずれかを行う必要があります。

  1. lengthあなたの財産を別の名前で呼ぶ
  2. for / in代わりにループを使用してください。

    var data = wrapper.data('infos')
    
    for (var x in data) {
        if (data.hasOwnProperty(x)) { // omit properties from the prototype chain
            console.log(x + ' > ' + data[x]);
        }
    }
    
于 2012-07-10T10:26:03.730 に答える