[英]Default image is not set
我正在使用window.FileReader来提供用户选择上传的图像的即时预览。
我已经创建了这个jsFiddle
我有以下问题:
A)第63-77行中的代码似乎被忽略了,尽管当我在第25行中打印“ i”的值时,我看到它正在增加(我怀疑它一定与window.Filereader的性质有关。不确定)。
if (i == 0) //if this is the first picture add it as primary too
{
var primaryimage = ' <img id=' + filename + ' height="220" width="220" src=' + this.result + ' /> ';
$('#primary-pic').find('.custom-input-file').hide();
$('#primary-pic').find('p').hide();
$('#primary-pic').append(primaryimage);
$('.custom-input-file').show();
}
B)如果您添加多个图像并出于某种原因按下“设置为默认值”,这似乎不适用于最后一张图像,但不知道为什么。
谢谢
您的代码有很多错误。
其中:
i
是某种“冻结”当你创建一个处理程序。 事实上, i
的处理程序中读取在同样i
作为主要功能: 在此示例中, i
前进,函数遇到的值将为4
。
for (var i = 0; i < 4; i++) {
var file = input.files[i];
var reader = new FileReader();
reader.onloadend = (function (file) {
return function () {
if (i == 0) { //actually, i will be 4
}
}
})(file)
}
我花了一些时间解决一些问题。 你可以在这里找到我的版本。 我希望您发现它有用并从中学到东西。
1)这些行将永远不会到达,因为if(i == 0)
then input.files.length == 1
返回true,因此无论何时转到else节(以上2行), i
实际上都大于0。
2)我认为问题在于您正在创建共享相同ID(img和按钮)的多个元素。 ID必须是唯一的。
嘿,我相信我看到了你的问题。 您正在循环使用FileReader对象中的onloadend事件。 这是一个异步函数,也就是说JavaScript在进入循环的下一个迭代之前不会等待该函数执行。 因此,您的某些逻辑取决于所讨论图像的onloadend函数已经执行,但是在您当前的设置中,这是不可靠的,i var可能已经指向了循环的下一个迭代,但是onloadend函数可能仍然是执行上一个循环并使用错误的i值。 这也会弄乱您其余的逻辑。 至于问题b),我没有完全深入研究这一问题,但是我注意到您在循环内为此声明了click事件,因此某些图像中附加了该事件的多个实例。 我的建议是,等待所有图像加载完毕,然后注入任何其他HTML,然后设置所需的任何事件(即click事件)。 我敢打赌,如果您这样做,问题b)会自行解决:)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.