2

我的情况是,我知道图像的名称,但不知道确切的扩展名。扩展名可以是 .jpg 或 .png。此外,图像本身甚至可能不存在。所以我必须执行以下操作:

  1. 尝试加载 image.jpg
  2. Onerror,尝试加载 image.png
  3. 出错,显示 notfound.jpg

我编写了以下代码:

<img src=image.jpg onerror="this.onerror=null; this.src=image.png;">

但是“this.onerror=null”只会阻止 onerror 进入无限循环。当再次触发 onerror 时,如何加载替代图像的替代图像“notfound.jpg”?

4

2 回答 2

1

在这里,我有我会使用 jquery 做的事情。我问你是否可以,你没有回答。

所以就在这里。

这将是标准的html:

<img src=image.jpg alt="" />

这将是附加到它的jquery:

$('img').on('error', function () {
    var $this = $(this);
    // ajax with type 'HEAD' checks to see if the file exists
    $.ajax({
        url: 'image.png', //place alternate img link here
        type: 'HEAD',
        success: function () {
            //if success place alternate image url into image
            $this.prop('src', 'image.png');
        },
        error: function () {
            //if error place notfound image url into image
            $this.prop('src', 'notfound.jpg');
        }
    });
});

在这里,我让它在不同的环境中工作,但它显示了最终产品:http: //jsfiddle.net/6nFdr/

于 2013-06-01T19:18:40.487 回答
0

在onerror设置图片src后返回false。

例子:

<img src="fake.png" onerror="this.src='http://www.gravatar.com/avatar/9950cb3a6bdc0e10b1260135bd145e77?s=32&d=identicon&r=PG'; return false;">

演示:http: //jsfiddle.net/rlemon/SKtVg/

你应该避免内联javascript btw。并不是说它不正确,只是不太理想。如果你没有使用内联 js,你可以让 onerror 运行一个小函数来检查其他图像,如果它们没有加载,则显示已知存在的图像。

于 2013-06-01T18:17:36.280 回答