如何使用onload函数将值放入对象?

时间:2013-07-02 08:52:45

标签: javascript

我想获取图像大小并将其放入对象中。这是我写的代码,它不能按我的意图工作。

var images = { a: { src: 'http://aaa/'}, b: {src: 'http://bbb/'}, … };
for (var i in images) {
    var img = new Image();
    img.onload = function() {
        images[i].width = this.width;
        images[i].height = this.height;
    }
    img.src = images[i].src;
}

1 个答案:

答案 0 :(得分:1)

你的问题是调用回调时i会发生变化:它的值将是循环结束的值。

解决方案是将images[i]存储为立即调用的函数中的变量。将您的代码更改为

var images = { a: { src: 'http://aaa/'}, b: {src: 'http://bbb/'}, … };
for (var i in images) {
    (function(o){
      var img = new Image();
      img.onload = function() {
        o.width = this.width;
        o.height = this.height;
      };
      img.src = o.src;
    })(images[i]);
}

Demonstration(打开控制台查看images