无法使用.append()添加的图像上调用jQuery .error()

时间:2012-11-04 20:53:46

标签: javascript jquery error-handling while-loop

应该是一个简单的while循环,附加一个图像并递增计数,直到因为图像不存在而触发.error()。

问题是错误事件永远不会触发。目录中有三个图像,但页面只是无限加载,直到选项卡崩溃。在html中的图像上调用.error(),只有当我追加图像时才会调用错误。

以下代码:

jQuery(document).ready(function($) {
    var images = 'load';
    var i = 1;

    while(images == 'load') {
        $('.images').append('<img src="window_0' + i + '.jpg" />')
            .error(function() {
                images = 'finished';
            });
        i++;
    }

});

如果我使用while(i&lt; 4)它完美地工作,因为.error()的结果无关紧要。问题是我需要这个变量,这样只需添加文件到目录而不编辑代码就可以增加加载的图像数量。

以前这可以通过ajax调用实现,但在我的jQuery版本中不起作用(1.7.1

1 个答案:

答案 0 :(得分:1)

这里有两个主要问题:首先,你没有将错误事件绑定到img,你将它绑定到$('。images')。

其次,javascript(大多数情况下)是单线程的。即使图像加载可能在后台发生,也不会发生javascript事件处理,直到你的循环退出,除非事件发生,否则它不会发生,所以你有一个catch-22。

这类似于链接加载事件,而不是等待错误事件:

    var i = 1;
    var img;
    function next() {
        if (img) $('.images').append(img);
        img = document.createElement('img');
        $(img).load(next);
        img.src='window_0' + (i++) + '.jpg';
    }
    next();