【问题标题】:How to listen to the error event of all images?如何监听所有图像的错误事件?
【发布时间】:2014-04-25 09:21:53
【问题描述】:

我想隐藏动态加载的损坏图像。对于静态的,这是可行的。

$('img').error(function() {
    $(this).css({ 'visibility': 'hidden' });
});

但是,当我将其绑定到 document 时,什么也没有发生。控制台也没有错误。

$(document).on('error', 'img', function() {
    $(this).css({ 'visibility': 'hidden' });
});

如何监听动态加载的图片错误?

【问题讨论】:

标签: javascript jquery html image events


【解决方案1】:

您可以使用useCaptureaddEventListener 来做到这一点。

document.addEventListener('error', (e) => {
  // do your magic here
}, true)

【讨论】:

【解决方案2】:

error 事件不会 冒泡DOM Level 2 Events 指定它应该,但 The DOM Level 3 Events 会覆盖它。

您可以尝试window.onerror,但我不确定这是否只会捕获代码中的运行时脚本错误或资源失败引发的错误。如果它有效,它也会捕获所有错误。

Arun P Johny 证实了我的怀疑,window.onerror 是不行的。

此事在error event with live讨论。

解决方案可能是在所有图像上添加通用错误处理程序,包括动态加载的图像。然后让该通用错误处理程序触发自定义 jQuery 事件,例如:

$( document ).on( 'imgerror', function ( event, originalEvent ) {
    // originalEvent is the error event
} );

function genericImgOnError( event ) {
    $( event.target ).trigger( 'imgerror', event );
}

function getImg( src ) {
    return $( '<img/>', {
        src: src,
    } ).on( 'error', genericImgOnError );
}

【讨论】:

  • 感谢您的快速回复。那么有没有办法解决这个问题呢?我将使用setInterval 然后每秒左右将错误处理程序应用于所有当前图像。即使图像在几毫秒前加载失败,我的事件处理程序是否也会被调用?
  • 否,必须在错误事件触发之前添加事件。您可以在api.jquery.com/error 阅读有关它的信息
猜你喜欢
  • 1970-01-01
  • 2023-02-11
  • 2016-12-06
  • 2015-02-03
  • 1970-01-01
  • 2011-10-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多