javascript - 如何正确地递归调用 img onerror 回调函数?

标签 javascript

我正在尝试通过构建其路径和文件名来设置图像 src。

这是我的代码:

var extensions = ["jpg", "jpeg", "JPG","JPEG","png","PNG", "gif", "GIF"];
var i=0;
var img = document.querySelector("img");
var testImages= function() {
    img.src = "Wildschwein_Sus_scrofa."+extensions[i];
    i++;
    if (i<extensions.length)
        img.onerror = testImages;
}

testImages();

但我不知道发生了什么。如果我这样做:

img.onerror = testImages;

似乎只处理了最后一个扩展,因为我得到:

GET file:///home/beol/Desktop/Wildschwein_Sus_scrofa.GIF net::ERR_FILE_NOT_FOUND

如果我这样做:

img.onerror = testImages();

该函数被无限次递归调用。

有人能告诉我 y 代码有什么问题吗?

最佳答案

也许你是这个意思 - 你确实需要在设置 src 之前分配处理程序:

var extensions = ["jpg", "jpeg", "JPG","JPEG","png","PNG", "gif", "GIF"];
var i=1;
var img = document.querySelector("img");
img.onerror = function() {
    console.log("error:"+this.src);
    if (i<extensions.length) img.src="Wildschwein_Sus_scrofa."+extensions[i];
    i++;
}
img.onload=function() {
    console.log("success:"+this.src);
}
img.src="Wildschwein_Sus_scrofa."+extensions[0];

如果您有多个具有不同扩展名的图像,并且您想要测试负载和错误,它可能看起来像

FIDDLE

var extensions = ["jpg", "jpeg", "JPG","JPEG","png","PNG", "gif", "GIF"];
var i=0;
var img = document.querySelector("img");

function loadnext(img) {
  if (i<extensions.length) {
    img.src="Wildschwein_Sus_scrofa."+extensions[i];
    i++;
  }
}
img.onerror = function() {
    console.log("error:"+this.src);
    loadnext(this);
}
img.onload=function() {
    console.log("success:"+this.src);
    loadnext(this);
}
loadnext(img);

如果你不想专门处理错误或负载,你可以这样做

var extensions = ["jpg", "jpeg", "JPG","JPEG","png","PNG", "gif", "GIF"];
var i=0;
var img = document.querySelector("img");
function loadnext() {
  if (i<extensions.length) {
    this.src="Wildschwein_Sus_scrofa."+extensions[i];
    i++;
  }
}
img.onload=img.onerror=loadnext; // no ()
img.onload(); // start

关于javascript - 如何正确地递归调用 img onerror 回调函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32783708/

相关文章:

javascript - Ember.js 每次循环 : compare current index data with previous index data

javascript - (Javascript) 需要帮助将对象转换为数组

javascript - if else 语句或 or 条件的倍数

javascript - 如何使用 d3.js 将图形/数据添加到人力车?

javascript - 如何将FlowJS注释应用于Sequelize模型?

javascript - 如何在需要 header 的axios发布请求中具有配置参数

javascript - 如何将字符串添加到变量;

javascript - 单击取消时,为什么 Electron showMessageBox Sync复制自己?

javascript - Jquery:选择 $(this) 所在的类

javascript - 我如何像 lodash 一样使用 JSDoc 对参数进行分组?