2013-04-30 45 views
1

我知道标题听起来对于关于关联数组及其长度问题的常见问题非常熟悉。但是,我没有找到解决我的问题在这里堆栈溢出呢。正确使用按钮的阵列长度问题

问题是,.length总是输出0,而不是想要的量,其在该测试的情况将是12.当我将其输出经由console.log我得到12个条目,我可以看到正确的值的长度属性。我重视我的萤火虫输出:

images: Array[12] 
    0: "img1.jpg" 
    1: "img2.jpg" 
    2: "img3.jpg" 
    3: "img4.jpg" 
    4: "img5.jpg" 
    5: "img6.jpg" 
    6: "img7.jpg" 
    7: "img8.jpg" 
    8: "img9.jpg" 
    9: "img10.jpg" 
    10: "img11.jpg" 
    11: "img12.jpg" 
    length: 12 
    __proto__: Array[0] 

下面的代码片段填充阵列:

this.images.push(el.toDataURL());

当我现在请其12

console.log(this,this.images,(this.images).length);始终为0,而​​不是任何帮助将是赞赏。

小提琴上的脚本。 (在控制台输出)

http://jsfiddle.net/EL2xR/

+0

你可以创建一个jsfiddle演示来显示你的问题吗? – xdazz 2013-04-30 10:04:43

+0

'this.images'如何初始化? – giorgian 2013-04-30 10:21:36

+0

this.images = []; 增加了jsfiddle。 – Chris 2013-04-30 10:22:04

回答

2

当你说this.img.onload你让它异步,你的init运行,但紧接在方法getImages之后,它立即发现aImages为空。 在运行getImages以获得正确结果之前,您应该考虑检查是否加载了所有图像。

这是一个修改后的示例。如果需要,你可以调整它! http://jsfiddle.net/EL2xR/1/

interval = setTimeout(function() { 
       _this.getImages(from, to); 
      }, 1000); 

检查,其中this.loaded出现在代码中,一个标志我以前知道,一切都是装的!然后用setTimeout运行相同的方法,直到加载为真!

+0

Omg ...当然! - 猜你刚刚救了我几个小时的搜索^^谢谢! – Chris 2013-04-30 10:50:36

+0

感谢您的编辑,我现在使用回调解决了问题。:)不知何故,我只是没有想到onload问题:D – Chris 2013-04-30 10:55:38

+0

不客气,很高兴我可以帮忙! – Angel 2013-04-30 10:57:13

0

啊 - 我明白你的意思。

所以问题只是当它打印到控制台时它是空的,但数组内容在您登录后更新。

您最初的console.log后添加此看到:

var that = this; 
    setTimeout(function() { 
     console.log("Later..."); 
     console.log(that,that.aImages,that.aImages.length); 
    }); 

也许混淆你的是,“本”和它的属性是住在控制台上,所以扩大了精灵 - 你看,它的aImages是完整的,但是当你第一次印刷它们时它们是空的。

+0

该数组是动态填充的,我使用images.push()向数组添加新值。由于这是对象的一部分,我必须使用this.images,其他所有内容都是相同的。图像数组通过[]定义。通过数组中的console.log仍然长度显示12.但直接输出this.images.length输出0.也添加小提琴,显示问题:http://jsfiddle.net/EL2xR/ – Chris 2013-04-30 10:29:42