我正在尝试从文件输入中显示图像的ajax预览。使用FileReader()很容易,但我正在使用循环,所以当我将结果放在图像源中时,我需要使用$(this)来定位输入的循环项。这对我来说甚至没有意义,所以我们走了。
我们有一个循环..
<li>
<input type="file" class="image" />
<img src="" class="preview" />
</li>
<li>
<input type="file" class="image" />
<img src="" class="preview" />
</li>
<li>
<input type="file" class="image" />
<img src="" class="preview" />
</li>
现在让我们说选择第二个输入,现在我需要将FileReader的结果添加到它的图像src中。我如何定位第二个循环项及其内容来做东西?
function readURL(input) {
if (input.files && input.files[0]) {
var reader = new FileReader();
reader.onload = function (e) {
// Here I need to use $(this) to target only the second list item's img.preview
$('.preview').attr('src', e.target.result);
};
reader.readAsDataURL(input.files[0]);
}
}
答案 0 :(得分:7)
之前我从未使用过这个API。有趣的东西。
此版本循环遍历所有文件输入并加载其预览图像。单击按钮即可触发该功能。
$(function(){
$("#btnLoadPreviews").click(loadPreviews_click);
})
function loadPreviews_click(e) {
$(".image").each(function() {
var $input = $(this);
var inputFiles = this.files;
if(inputFiles == undefined || inputFiles.length == 0) return;
var inputFile = inputFiles[0];
var reader = new FileReader();
reader.onload = function(event) {
$input.next().attr("src", event.target.result);
};
reader.onerror = function(event) {
alert("I AM ERROR: " + event.target.error.code);
};
reader.readAsDataURL(inputFile);
});
}
如果您希望在选择预览图像时加载,则可以使用此版本。
$(function(){
$(".image").change(showPreviewImage_click);
})
function showPreviewImage_click(e) {
var $input = $(this);
var inputFiles = this.files;
if(inputFiles == undefined || inputFiles.length == 0) return;
var inputFile = inputFiles[0];
var reader = new FileReader();
reader.onload = function(event) {
$input.next().attr("src", event.target.result);
};
reader.onerror = function(event) {
alert("I AM ERROR: " + event.target.error.code);
};
reader.readAsDataURL(inputFile);
}
答案 1 :(得分:0)
我就是这样做的。将目标分配给reader对象本身并稍后使用。
function readURL(input) {
if (input.files && input.files[0]) {
var reader = new FileReader();
// set where you want to attach the preview
reader.target_elem = $(input).parent().find('preview');
reader.onload = function (e) {
// Attach the preview
$(reader.target_elem).attr('src', e.target.result);
};
reader.readAsDataURL(input.files[0]);
}
}