for循环中的jQuery .load()

时间:2013-06-22 18:12:02

标签: javascript jquery load

我向服务器发送ajax请求。然后我收到一个对象。该对象看起来像这样:

{
    "payload": {
        "result": [
            "http://example.com/img1.jpg",
            "http://example.com/img2.jpg",
            "http://example.com/img3.jpg",
            "http://example.com/img4.jpg",
            "http://example.com/img5.jpg"
        ]
    }
}

然后我使用for循环遍历对象

if (typeof response.payload.result == 'object') {
    var ln = response.payload.result.length;
    var i;
    if (ln > 0) {
        for (i = 0; i < ln; i++) {
              /* this shows i was increased for every iteration */
              console.log(i);
          var current_img = response.payload.result[i];
          var img = $("<img />").attr('src', current_img)
           .load(function () {
                  console.log(i);
                  /* this logs the last iteration 4 times */
                $("#product-images").append(img);
          });
        }
    }
}

我的问题是只创建了(1)图像元素。在此代码执行后附加到DOM的单个元素是数组中最后一个元素的值。为什么jQuery.load()仅在最后一次迭代中被调用?

2 个答案:

答案 0 :(得分:2)

if (typeof response.payload.result == 'object') {
    var ln = response.payload.result.length;
    var i;
    if (ln > 0) {
        for (i = 0; i < ln; i++) {
            (function (n) {
                var current_img = response.payload.result[i];
                var img = $("<img />").attr('src', current_img)
                    .load(function () {
                    console.log(n);
                    $("#product-images").append(img);
                });
            })(i);
        }
    }
}

答案 1 :(得分:0)

我猜你错过了这行的分号

var img = $("<img />").attr('src', current_img)

并且您尚未指定要在其中加载图像的元素的选择器。