使用$(this)和FileReader()来定位结果

Pol*_*fra 2 jquery file-upload filereader

我正在尝试从文件输入中显示图像的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>
Run Code Online (Sandbox Code Playgroud)

所以现在让我们说选择第二个输入,现在我需要将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]);
        }
 }
Run Code Online (Sandbox Code Playgroud)

Fra*_*non 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);
    });
}
Run Code Online (Sandbox Code Playgroud)

如果您希望在选择预览图像时加载,则可以使用此版本.

$(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);
}
Run Code Online (Sandbox Code Playgroud)