2016-07-05 62 views
1

我使用下面的脚本在上传之前预览图像。 我有这样的HTML:在上传之前预览图像时获取通过标识的图像

<div> 
    <img id="image" src="#"> 
</div> 

<input type="file" accept="image/gif, image/jpeg, image/png" onchange="readURL(this);"> 

和JS是这样的: (我用jquery-2.0.0.min.js

function readURL(input) { 
     if (input.files && input.files[0]) { 
      var reader = new FileReader(); 
      reader.onload = function (e) { 
       $('#image').attr('src', e.target.result); 
       }; 

       reader.readAsDataURL(input.files[0]); 
      var image = document.getElementById('image'); 
      console.log(image); 

     }} 

我的问题是这样的:当我下载我之前可以显示图像使用此脚本” t得到图像var image = document.getElementById('image');和控制台日志显示此:<img src="#" id="image">。上传前如何显示图片?

+0

你想从'img'得到哪些数据? –

+0

@RoryMcCrossan当我选择图像与输入我显示这个,但我不能用'document.getElementById('图像')' –

回答

2

​​.readAsDataURL()方法异步返回结果。包括var image = document.getElementById('image');console.log(image);console.log($("#image")[0])FileReaderonload事件处理程序。

FileReader对象允许Web应用程序异步读取使用文件或BLOB对象指定文件存储在用户的计算机上, 上的文件(或原始数据缓冲区)或数据的 内容阅读。

FileReader.readyState只读

一个数字,指示FileReader的状态。这是以下之一:

EMPTY 0尚未加载任何数据。

LOADING 1当前正在加载数据。

完成2整个读取请求已完成。

function readURL(input) { 
 
    if (input.files && input.files[0]) { 
 
    var reader = new FileReader(); 
 
    reader.onload = function(e) { 
 
     // do stuff when `.readAsDataURL()` completes 
 
     var image = document.getElementById("image"); 
 
     image.src = e.target.result; 
 
     console.log(image, e.target.result, reader.DONE); 
 
    }; 
 
    reader.readAsDataURL(input.files[0]); 
 
    } 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div> 
 
    <img id="image" src="#" /> 
 
</div> 
 

 
<input type="file" accept="image/gif, image/jpeg, image/png" onchange="readURL(this);">

+0

Tnx为你的答案:)。那么我怎样才能改变我的脚本? –

+0

这和问题中的代码有什么区别?除了检索异步回调中的'img'之外,它在逻辑上是相同的。 –

+1

@RoryMcCrossan _“这与问题中的代码有什么区别?”_作为解释的问题,在这里,OP期望通过将'datagrow'设置为'img'的src来查看''因为'.readAsDataURL()'异步返回结果,所以'onload'处理程序后面的console.log(image)'不会返回预期的结果。调整'console.log(image)'放置到回调以查看'FileReader'的'.result'。除了调整之外,你是对的,问题中的'js'将保持不变。 – guest271314

相关问题