2015-10-28 48 views
1

我试图存储对数组中的几个文本字段的引用。当我尝试访问数组的元素时,我得到了一些整数而不是textfield对象!我想不通为什么会这样......钛textField存储为整数

输出后
var textfields = []; 
function doClick(e) {   
    var txtField = Ti.UI.createTextField({ 
     value:"test" 
    }); 
    textfields.push(txtField); 
    $.index.add(txtField); 

    for(var textfield in textfields) { 
     console.log("stored value : "+textfield); 
    } 
} 

$.index.open(); 

三“点击”:

[INFO] : ---click--- 
[INFO] : stored value : 0 
[INFO] : ---click--- 
[INFO] : stored value : 0 
[INFO] : stored value : 1 
[INFO] : ---click--- 
[INFO] : stored value : 0 
[INFO] : stored value : 1 
[INFO] : stored value : 2 

然而,当我字符串化整个数组,我看到文本框里面,但我不”不知道如何访问它。 这里有两个文本框里面的数组:

[ 
    { 
     "enabled":true, 
     "selection":{ 
     "length":0, 
     "location":0 
     }, 
     "backgroundRepeat":false, 
     "children":[ 

     ], 
     "rect":{ 
     "height":45, 
     "y":61, 
     "x":137, 
     "width":47 
     }, 
     "value":"voilà", 
     "visible":true, 
     "size":{ 
     "height":45, 
     "y":0, 
     "width":47, 
     "x":0 
     }, 
     "keepScreenOn":false, 
     "apiName":"Ti.UI.TextField", 
     "maxLength":-1, 
     "bubbleParent":true 
    }, 
    { 
     "enabled":true, 
     "selection":{ 
     "length":0, 
     "location":0 
     }, 
     "backgroundRepeat":false, 
     "children":[ 

     ], 
     "rect":{ 
     "height":45, 
     "y":107, 
     "x":137, 
     "width":47 
     }, 
     "value":"voilà", 
     "visible":true, 
     "size":{ 
     "height":45, 
     "y":0, 
     "width":47, 
     "x":0 
     }, 
     "keepScreenOn":false, 
     "apiName":"Ti.UI.TextField", 
     "maxLength":-1, 
     "bubbleParent":true 
    } 
] 

据我了解,textfield.value应该工作,但因为文本框本身是一个数字,它返回“未定义” ...我如何访问我存储在元素数组?

+0

尝试调用文本框[“值”] –

+0

这也是不确定的,但感谢您的尝试。 – midemarc

+0

你不应该将textfields串起来!只需循环遍历它们,并获取值 –

回答

4

for...in是错误的...它应该是:

for(var textfield in textfields) { 
    console.log("textfield : "+textfields[textfield]); 
    console.log("textfield : "+textfields[textfield].value); 
} 

for in设置在textfieldkey,不是元素。

请查看文档在这里:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...in#Array_iteration_and_for...in

一个更好的方法来环路钛(采用合金时)为underscore

_.each(textfields, function(textfield){ 
    console.log('textfield value:' + textfield.value); 
} 
+0

非常感谢,特别是对于解释。我应该看看它。 – midemarc

+0

不客气! –

2

请试试forE代替for-in循环。见下面的代码。

textfields.forEach(function(textField){ 
    console.log(textField.value); 
}); 
+0

for可以工作,如果做得不好的话) –

+0

你的解决方案也在工作,谢谢!我接受了Rene Pot的回答,因为我对'in for'循环更加舒适,他解释了一下。 – midemarc

+1

没问题,这是偏好问题。最重要的是你应该得到理想的结果。 –