【问题标题】:jquery re-establish img src in .load() functionjquery 在 .load() 函数中重新建立 img src
【发布时间】:2011-09-08 05:09:23
【问题描述】:

如果图像 src 路径无效或找不到图像,我正在尝试弄清楚如何重新建立 img src。我有一个动态创建的 img src 路径,它有时可能指向一个没有实际图像的目录。在这种情况下,我需要将 src 更改为 img/missing.jpg。我没有运气就这样做了:

$('.imgContainer').append( "<img id='pic' src='/dynamically/created/path/to/img.jpg'>" );
$('.imgContainer img#pic').load(function(){
     if( $(this).width() == 0 && $(this).height() == 0 ){
        $(this).attr({src: 'img/missing.jpg'})
               .css({width:'100px', height:'100px'});
     }
 });

也许有更好的方法来做到这一点 - 但我不知道......我尝试使用 $(this).onerror = //some function 但也不知道如何让它工作。

任何帮助将不胜感激......

【问题讨论】:

  • 我建议,在加载事件中,您将图像替换为另一个具有相同 id 指向missing.jpg 的图像。不过,我不知道它是否会起作用。只是觉得应该。
  • 感谢您的建议 - 我会试一试

标签: jquery image path load src


【解决方案1】:

问题的关键在于,'load' 事件仅在图像成功加载时才会在图像上触发 - 因此,如果您指定了无效路径,则加载事件将永远不会发生。您需要“错误”处理程序,如下所示:

var img = $("<img id='pic' src='/dynamically/created/path/to/img.jpg'>")
 .error(function(){
        $(this).attr({src: 'img/missing.jpg'})
               .css({width:'100px', height:'100px'});
 })
 .appendTo('.imgContainer');

我已经稍微简化了您的代码 - 所以顺序是:创建图像元素,绑定错误事件处理程序,然后附加到文档。我不知道这是否有任何实际区别,但在图像有机会开始加载之前设置处理程序似乎更有意义(否则理论上加载可能在您的事件被分配之前发生)。

此外,您对 width== 0 和 height == 0 的检查不适用于所有浏览器。 Chrome 和 Safari 都会为您提供它们显示的“损坏的图像”图标的宽度和高度:18x18px。

【讨论】:

  • 信息丰富。感谢您让我知道 - webkit 浏览器中的尺寸检查错误。
  • 很好的答案 - 我会在星期一测试它。再次感谢您的意见。
  • 抱歉耽搁了这么久 - 一直在度假。这个建议很有效而且很棒!我不知道有一个.error() 函数。再次感谢。
猜你喜欢
  • 1970-01-01
  • 2013-07-19
  • 2010-12-22
  • 2011-06-16
  • 2016-04-17
  • 2017-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多