什么是反对错误事件

时间:2019-05-03 10:34:30

标签: javascript image onerror

我有一个图像,该图像通过使用javascript更改图像的src来进行更新。我添加了一个error事件侦听器,以测试图像是否损坏,然后重新加载它。但是,如果它没有损坏,我想删除error事件监听器。处理图像时,似乎无法找出与onerror相反的正确事件。

<img src="path/to/img.jpg" id="img">

<script>
var img = document.getElementById('img');
var imgURL = "/path/to/new_img.png";
img.addEventListener('error', refresh);
img.src = imgURL;

function refresh(e) {
    img.src = imgURL;
    if(e.type !== "error") img.removeEventListener('error', refresh);
};
</script>

最后一条语句e.type !== error仍属于错误函数,因此仍为false。如果事件不产生错误,我需要可以打电话的东西。如果有类似的东西,则类似onsuccess

1 个答案:

答案 0 :(得分:2)

在此特定情况下,相反的事件是load事件,指示已加载图像。令我惊讶的是没有找到记录在案的on MDN

var img = document.getElementById('img');
var imgURL = "/path/to/new_img.png";
img.addEventListener('error', refresh);
img.addEventListener('load', refresh); // ***
img.src = imgURL;

然后

function refresh(e) {
    img.src = imgURL;
    if (e.type !== "error") {
        img.removeEventListener('error', refresh);
        img.removeEventListener('load', refresh);
    }
}

您可能会在其中添加一些超时和/或延迟逻辑,因为否则它将不断地重新请求图像,直到/除非图像成功(如果URL无效,它就永远不会这样做)。