JavaScript - 表单提交前预览图片
其实这东西网上到处都是,但并不完整。
正好我也遇到了这个问题,不仅仅是预览,还需要得到图片的属性。
于是东凑西凑整理出一个完整的版本,并根据个人的理解加上了一点点说明。
首先做一些准备工作,HTML方面主要是img和input标签的id:
<form>
<input type='file' id="imgFile" />
<div id="previewDiv">
<img id="previewImg" src="#" alt="your image" />
</div>
</form>
另外,要为imgFile的change事件设置function:
$(function(){
$('#imgFile').change(function(e){doPreview(this);})
});
先从IE开始,IE上还是比较容易的。
对于file控件的value会老老实实地获取,
而且创建Image对象时只需要指定src属性值就能成功。
剩下的就是从Image对象中获得属性了。
代码如下:
function doPreview(){
document.getElementById('imgFile').src = input.value;
var img = new Image();
img.src = input.value;
alert('width:'img.width+'; height:'+img.height);
}
当然,我们也可以不用img元素:
function doPreview(){
var previewDiv = document.getElementById("previewDiv");
previewDiv.filters.item("DXImageTransform.Microsoft.AlphaImageLoader").src = input.value;
var img = new Image();
img.src = input.value;
previewDiv.style.width = img.width;
previewDiv.style.height = img.height;
alert('width:'+img.width+'; height:'+img.height);
}
如果要使用上面的filter,还需要加上:
<style type="text/css">
#previewDiv {
filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod=scale);
}
</style>
但这种方式在chrome下是行不通的,因为input.value会输出这样的结果:

也就是做了些安全处理,似乎修改浏览器设置就可以,但我们不希望每个人都修改设置。
而FileReader对象恰好可以解决这个问题,
我的情况需要用到FileReader的readAsDataURL。
readAsDataURL将blob读作一个URL,load事件触发后将结果保存在this.result。
试着输出一下返回结果,大概是如下结果,长度几万到几十万不等:

其实这个返回结果可以直接用作img.src的值。
剩下的就没有什么难度了。
完整代码如下:
$(function(){
$('#imgFile').change(function(e){doPreview(this);})
});
function doPreview(input) {
if (input.files && input.files[0]) {
var reader = new FileReader();
var file = input.files[0];
reader.readAsDataURL(file);
reader.onload = function (e) {
var img = new Image();
img.src = this.result;
img.onload = function(){
var w = this.width,
h = this.height,
t = file.type,
n = file.name,
s = ~~(file.size/1024) +'KB';
$('#previewDiv').append('<img src="' + this.src +'"> '+w+'x'+h+' '+s+' '+t+' '+n+'<br>');
}
};
}else{
var previewDiv = document.getElementById("previewDiv");
previewDiv.filters.item("DXImageTransform.Microsoft.AlphaImageLoader").src = input.value;
//previewDiv.innerHTML = '<img src="'+input.value+'" />'
//document.getElementById('previewImg').src = input.value;
var img = new Image();
img.src = input.value;
previewDiv.style.width = img.width;
previewDiv.style.height = img.height;
alert('width:'+img.width+'; height:'+img.height);
}
}
JavaScript - 表单提交前预览图片的更多相关文章
- hTML5实现表单内的上传文件框,上传前预览图片,针刷新预览images
hTML5实现表单内的上传文件框,上传前预览图片,针刷新预览images, 本例子主要是使用HTML5 的File API,建立一個可存取到该file的url, 一个空的img标签,ID为img0,把 ...
- springmvc下js控制表单提交(表单提交前检验,提交后获取json返回值)
这个问题我搞了四天,终于搞懂.因为对js很不熟悉.郁闷的是后台代码出错总可以设置断点调试,前端js代码出错只能通过浏览器提供一些运行数据来分析,很不习惯. 首先说下逻辑:这是一个注册功能,我希望,注册 ...
- JavaScript表单提交四种方式
总结JavaScript表单提交四种方式 <!DOCTYPE html> <html> <head> <title>JavaScript表单提交四种方式 ...
- form的onsubmit事件--表单提交前的验证最佳实现方式
今天遇到了一个问题,页面中include了很多的公共页面(都是没有form的),并且里面好多的地方都是自行提交的(页面中加入一个type=“submit”域,然后js中写入sumbit.click来执 ...
- javascprit form表单提交前验证以及ajax返回json
1.今天要做一个手机验证码验证的功能.需求是前端页面点击发送 短信验证码,后台接收后通过ajax返回到前端,之后前端在提交时候进行验证.思路很简单,不过做的过程还是学到不少的东西. 1.ajax请求后 ...
- a标签指定的url,在表单提交前进行js验证的实现
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- Html form 表单提交前验证
可以使用form表单的onsubmit方法,在提交表单之前,对表单或者网页中的数据进行检验. onsubmit指定的方法返回true,则提交数据:返回false不提交数据. 直接看下面的代码: 1 & ...
- js 在表单提交前进行操作
最近在写页面的时候,需要手动写一些在表单进行提交前的验证操作,正好看到了2种阻止表单提交的方法,可以进行一些逻辑处理 方法一:使用return false 原生js写法: <form id=&q ...
- easyui 表单提交前的 confirm 处理
最近学习用 easyui,异步提交表单是遇到一个小问题 $('#fModiDetail').form('submit',{ url:'...', onSubmit:function(){ if($(t ...
随机推荐
- javascript实现playfair和hill密码算法
时至期末,补习信息安全概论作业.恰巧遇古典密码学算法中的playfair算法和hill算法,用javascript语言实现起来是在有趣,边查百度边编码,顺便好好补习一下javascript基础. pl ...
- 在红帽RHEL7.0里配置网卡的四种方法
第一种方法 :采用vim编辑器来配置: 1. 如下图的步骤所示: 2. 输入这个命令后进行配置成下方图片里的内容: 3. 然后退出vim 编辑器,然后重新启动一下网络服务配置: 4.这些配置完后 ...
- 【OCP|052】OCP换题库,052最新题库及答案整理-第10题
10.Which two are true about consistent database backups? A) They can only be taken when a RECOVERY C ...
- Struts2框架里面action与前端jsp页面进行交互路径问题---》一个对话框里面有很多超链接,进行相应的跳转
一个对话框里面有很多超链接,右边是点击超链接跳转到的相应页面(在一个页面上就相当于点击该超链接时候,就把该简短页面置顶):这个问题困扰我两天:还请大神给我解决,也没有解决,我仔细对比了相关路径,后面添 ...
- Struts2框架action层学习心得体会
在struts2框架中,当action处理完之后,就应该向用户返回结果信息,该任务被分为两部分:结果类型和结果本身. 结果类型提供了返回给用户信息类型的实现细节.结果类型通常在Struts2中就已预定 ...
- gdb调试参数
参考 这里 1)gdb 打印字符串的全部内容 set print element 0 2)用x命令查看内存(examine的缩写) (gdb) x/1ub 0x7ffff7fbf7a00x7ffff7 ...
- Maven环境下面多项目之间的引用
如图: https://github.com/sdl/odata-example sdl OData例子包含了4个项目,下载到本地后编译.发现只有model项目是可以编译过去了.其他几个暂时编译不过 ...
- 进阶篇:2)DFMA方法的运用
本章目的:DFMA方法运用,引导后面的章节.(运用比只理解重要!) 1.DFMA概述 1.1 DFMA的由来 工艺粗略可分为装配工艺和制造工艺.在这里,我们所讲的“制造”是指产品或部件的某个零件的制造 ...
- C#集合之不变的集合
如果对象可以改变其状态,就很难在多个同时运行的任务中使用.这些集合必须同步.如果对象不能改变器状态,就很容易在多个线程中使用. Microsoft提供了一个新的集合库:Microsoft Immuta ...
- python量化分析系列之---5行代码实现1秒内获取一次所有股票的实时分笔数据
python量化分析系列之---5行代码实现1秒内获取一次所有股票的实时分笔数据 最近工作太忙了,有一个星期没有更新文章了,本来这一期打算分享一些对龙虎榜数据的分析结果的,现在还没有把数据内的价值很好 ...