如果在加载延迟加载图像后图像被破坏,则设置图像默认值。我怎么做的?

时间:2017-05-14 09:58:15

标签: javascript jquery html lazy-loading

加载延迟加载后,我无法设置图像默认值。

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<img src="images/logo.png" onerror="setDefaultImage(this);" data-original="http://pacehold.it/600x450" class="img-responsive lazy" alt="">
{{1}}

1 个答案:

答案 0 :(得分:0)

只需将函数声明移出$函数即可。当$中的函数不在窗口的上下文中时,html无法访问它。当您将其移出时,您可以使用window.setDefaultImage(在console中尝试)来访问它,以便使用html。

&#13;
&#13;
//function setDefaultImage(img) {
  //set default.
  //img.src = "https://www.google.com/images/srpr/logo11w.png";
//}

var errorURL = "https://www.google.com/images/srpr/logo11w.png";

$('[data-original]').each(function() {
  var $this = $(this),
      src = $this.attr('data-original');
      
  var img = new Image();
  img.onload = function() {
    $this.attr('src', src);
  }
  img.onerror = function() {
    $this.attr('src', errorURL);
  }
  img.src = src;
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
Error:
<img data-original="http://pacehold.it/600x450" class="img-responsive lazy" alt=""> <br />
OK:
<img data-original="https://www.w3schools.com/html/pic_mountain.jpg" class="img-responsive lazy" alt="">
&#13;
&#13;
&#13;