2012-07-10 26 views
0

数据我遇到一些很奇怪试图重复使用jQuery数据存储功能的 对象的属性。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缓存或某事有关吗?

+0

你可以把执行console.log(wrapper.data( '的相关信息'))的输出引擎收录或的jsfiddle? – Hardik 2012-07-10 10:02:22

+1

你使用的是什么版本的jQuery?这符合我的预期(http://jsfiddle.net/27dCJ/)(jQuery 1.7.2)。我还会考虑加入一个显示问题的jsFiddle * live *。 – Matt 2012-07-10 10:02:46

+0

选中此[示例](http://jsfiddle.net/2kW29/)。 – 2012-07-10 10:13:10

回答

0

因为你的对象有一个length属性,它被作为interpeted一个数组,在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]); 
        } 
    } 
    
+0

我宁愿使用for/in循环,它完美的作品在我的情况。 非常感谢,你真的帮助我了! – anael 2012-07-10 10:36:06