gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 08:34:39 25 4
gpt4 key购买 nike

我正在尝试通过构建其路径和文件名来设置图像 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com