这是我使用以下代码的解决方法。我知道您在编辑中谈到了 localStorage,但我想分享我如何实际实施该解决方法。我喜欢将函数放在 body 上,这样即使之后通过 AJAX 添加类,“更改”命令仍会触发事件。
在此处查看我的示例:http : //jsfiddle.net/x11joex11/9g8NN/
如果您运行 JSFiddle 示例两次,您会看到它记住了图像。
我的方法确实使用了 jQuery。这种方法还演示了图像确实存在以证明其有效。
HTML:
<input class="classhere" type="file" name="logo" id="logo" />
<div class="imagearea"></div>
JS:
$(document).ready(function(){
//You might want to do if check to see if localstorage set for theImage here
var img = new Image();
img.src = localStorage.theImage;
$('.imagearea').html(img);
$("body").on("change",".classhere",function(){
//Equivalent of getElementById
var fileInput = $(this)[0];//returns a HTML DOM object by putting the [0] since it's really an associative array.
var file = fileInput.files[0]; //there is only '1' file since they are not multiple type.
var reader = new FileReader();
reader.onload = function(e) {
// Create a new image.
var img = new Image();
img.src = reader.result;
localStorage.theImage = reader.result; //stores the image to localStorage
$(".imagearea").html(img);
}
reader.readAsDataURL(file);//attempts to read the file in question.
});
});
这种方法使用 HTML5 文件系统 API 来读取图像并将其放入新的 javascript img 对象中。这里的关键是 readAsDataURL。如果您使用 chrome 检查器,您会注意到图像以 base64 编码存储。
读取器是异步的,这就是它使用回调函数 onload 的原因。因此,请确保任何需要图像的重要代码都在 onLoad 内,否则您可能会得到意想不到的结果。