5

对于以下将在上传前预览照片的脚本有以下问题并需要答案。该脚本来自http://jsbin.com/uboqu3/edit#javascript,html

1) 该脚本适用于 Firefox,不适用于 IE。如何使其适用于 IE?

2)它没有删除照片的方法。需要在预览照片上安装一个小图像“X”,单击此“X”将删除照片。谁能提供这个解决方案?

<!DOCTYPE html>
<html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
<script>
function readURL(input) {
    if (input.files && input.files[0]) {
        var reader = new FileReader();

        reader.onload = function (e) {
            $('#img_prev')
            .attr('src', e.target.result)
            .height(200);
        };

        reader.readAsDataURL(input.files[0]);
    }
}
</script>

<meta charset=utf-8 />
<title>JS Bin</title>
<!--[if IE]>
<script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
<style>
article, aside, figure, footer, header, hgroup,
menu, nav, section { display: block; }
</style>
</head>
<body>
<input type='file' onchange="readURL(this);" />
<img id="img_prev" src="#" alt="your image" />
</body>
</html>
4

6 回答 6

6

演示

在几个浏览器上测试过,Chrome、Fx、Safari 6(有人可以测试 5 吗?)

可以在 XP 上的 IE8 上工作,无需更改设置,但正如 @Gunasekaran 在本页后面提到的那样,您可能需要

打开工具->互联网选项->安全选项卡->自定义级别-找到设置“将文件上传到服务器时包含本地目录路径”,然后单击启用。

<!DOCTYPE html>
<html>
<head>
<meta charset=utf-8 />
<title>Image preview</title>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
<script>
var blank="http://upload.wikimedia.org/wikipedia/commons/c/c0/Blank.gif";
function readURL(input) {
    if (input.files && input.files[0]) {
        var reader = new FileReader();

        reader.onload = function (e) {
            $('#img_prev')
            .attr('src', e.target.result)
            .height(200);
        };

        reader.readAsDataURL(input.files[0]);
    }
    else {
      var img = input.value;
        $('#img_prev').attr('src',img).height(200);
    }
    $("#x").show().css("margin-right","10px");
}
$(document).ready(function() {
  $("#x").click(function() {
    $("#img_prev").attr("src",blank);
    $("#x").hide();  
  });
});
</script>
<!--[if IE]>
<script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
<style>
article, aside, figure, footer, header, hgroup,
menu, nav, section { display: block; }
#x { display:none; position:relative; z-index:200; float:right}
#previewPane { display: inline-block; }
</style>
</head>
<body>
<section>
<input type='file' onchange="readURL(this);" /><br/>
<span id="previewPane">
<img id="img_prev" src="#" alt="your image" />
<span id="x">[X]</span>
</span>
</section>
</body>
</html>

在 XP 上的 IE8 中看起来像这样:

例子

一种较新的方法是我尚未实现的createObjectURL

更新如果您想允许用户两次选择相同的图像,您将需要添加一个 onclick 以清除文件输入(onchange 不会触发)

选择同一文件时未触发 HTML 输入文件选择事件

于 2012-04-18T09:44:23.090 回答
2

这将不适用于 Internet Explorer 10 ...FileReader()直到 IE10 才引入支持 .. 它适用于 Chrome 7 和 Firefox 3.6

在此处查看对 FileReader或caniuse.com的支持的文档

于 2012-04-18T09:36:22.400 回答
1

回复@user1315468 IE8 的最后一个响应需要更改安全设置:

打开工具-> 互联网选项-> 安全选项卡-> 自定义级别找到设置“将文件上传到服务器时包含本地目录路径”,然后单击启用。

进行此更改后,您可以使用 mplungjan 的演示链接重新打开浏览器。希望这可以帮助。

于 2012-07-05T07:19:58.750 回答
0

FileReader sounds great to read content of image or file. But consider that file that you were reading was 20MB big, reading it as dataURL is going to create a JS object which is tat big. How do you avoid that ?

于 2014-01-08T23:58:26.373 回答
0

**我已经粘贴了所有浏览器的完整工作代码..

注意:有时 Internet Explorer 可能会阻止脚本,因此为了查看图像,请单击提示和“允许阻止的内容”。下面是工作代码...**

<html>
<head>
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.js"></script>

</head>

<body>
<form name="form2">

<div>
<input type="file"  name="myFile"   id="myFile" onchange="readURL(this);"></input>
</div>

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

</form>
<script>

function readURL(input) {

if (input.files && input.files[0]) {
    var reader = new FileReader();

    reader.onload = function (e) {
        $('#previewImg')
            .attr('src', e.target.result)
            .width(130);
    }
reader.readAsDataURL(input.files[0]);

}else{
          var filename = "";
         filename = "file:\/\/"+input.value;
         document.form2.previewImg.src=filename;
         document.form2.previewImg.style.width="130px";

 }
}
 </script>   
</body>
</html>
于 2013-03-06T12:40:20.400 回答
0

<img id="img1" alt="" runat="server"/> <span id="x" ></span> <asp:FileUpload runat="server" ID="FileUpload1" onchange="readURL(this)" />

<script type="text/javascript">
function readURL(input) {
    if (input.files && input.files[0]) {
        var reader = new FileReader();
        reader.onload = function (e) {
            $("#imgRepresentImage").attr("src", e.target.result).width(200);
        };
        reader.readAsDataURL(input.files[0]);
    } else {
        var img = input.value;
        $("#imgRepresentImage").attr("src", img).width(200);
    }
    $("#x").text('[X]');
}
$(document).ready(function () {
    $("#x").click(function () {
        $("#imgRepresentImage").attr("src", "").width(0);
        $("#x").text('');
        $("#representImageUpload").val('');
    });
});

为我工作:)

于 2016-11-03T08:15:35.710 回答