其实这东西网上到处都是,但并不完整。
正好我也遇到了这个问题,不仅仅是预览,还需要得到图片的属性。
于是东凑西凑整理出一个完整的版本,并根据个人的理解加上了一点点说明。

首先做一些准备工作,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 - 表单提交前预览图片的更多相关文章

  1. hTML5实现表单内的上传文件框,上传前预览图片,针刷新预览images

    hTML5实现表单内的上传文件框,上传前预览图片,针刷新预览images, 本例子主要是使用HTML5 的File API,建立一個可存取到该file的url, 一个空的img标签,ID为img0,把 ...

  2. springmvc下js控制表单提交(表单提交前检验,提交后获取json返回值)

    这个问题我搞了四天,终于搞懂.因为对js很不熟悉.郁闷的是后台代码出错总可以设置断点调试,前端js代码出错只能通过浏览器提供一些运行数据来分析,很不习惯. 首先说下逻辑:这是一个注册功能,我希望,注册 ...

  3. JavaScript表单提交四种方式

    总结JavaScript表单提交四种方式 <!DOCTYPE html> <html> <head> <title>JavaScript表单提交四种方式 ...

  4. form的onsubmit事件--表单提交前的验证最佳实现方式

    今天遇到了一个问题,页面中include了很多的公共页面(都是没有form的),并且里面好多的地方都是自行提交的(页面中加入一个type=“submit”域,然后js中写入sumbit.click来执 ...

  5. javascprit form表单提交前验证以及ajax返回json

    1.今天要做一个手机验证码验证的功能.需求是前端页面点击发送 短信验证码,后台接收后通过ajax返回到前端,之后前端在提交时候进行验证.思路很简单,不过做的过程还是学到不少的东西. 1.ajax请求后 ...

  6. a标签指定的url,在表单提交前进行js验证的实现

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  7. Html form 表单提交前验证

    可以使用form表单的onsubmit方法,在提交表单之前,对表单或者网页中的数据进行检验. onsubmit指定的方法返回true,则提交数据:返回false不提交数据. 直接看下面的代码: 1 & ...

  8. js 在表单提交前进行操作

    最近在写页面的时候,需要手动写一些在表单进行提交前的验证操作,正好看到了2种阻止表单提交的方法,可以进行一些逻辑处理 方法一:使用return false 原生js写法: <form id=&q ...

  9. easyui 表单提交前的 confirm 处理

    最近学习用 easyui,异步提交表单是遇到一个小问题 $('#fModiDetail').form('submit',{ url:'...', onSubmit:function(){ if($(t ...

随机推荐

  1. 【QTP专题】04_对象及操作方法

    本节介绍知识点包括 1.QTP自动化的原理 2.两类对象:TO(测试对象).RO(运行对象) 3.操作方法:SetTOProperty,GetROProperty,GetTOProperty 1.QT ...

  2. 201621123012《Java程序设计》第12次学习总结

    作业12-流与文件 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容. 2. 面向系统综合设计-图书馆管理系统或购物车 使用流与文件改造你的图书馆管理系统或购物车 ...

  3. 526. Beautiful Arrangement

    Suppose you have N integers from 1 to N. We define a beautiful arrangement as an array that is const ...

  4. [ActionScript 3.0] 如何控制加载swf动画的播放与暂停

    此方法适用于用as 1.0或者as2.0以及as3.0编译的swf,因为as1.0和as2.0编译的swf是AVM1Movie类型,因此需要通过类ForcibleLoader.as将其转换为versi ...

  5. [ActionScript 3.0] 利用InteractivePNG.as类精确选择识别png图片有像素的区域

    用法:如果是把png直接导入flash转换成影片剪辑,只需在影片剪辑属性中勾选为ActionScript导出(x),并把基类里的flash.display.MovieClip替换成Interactiv ...

  6. jxl获取excel中的合并的单元格(主要是方法介绍)

    Range[] rangeCells = sheet.getMergedCells();// 返回sheet中合并的单元格数组 for (Range r : rangeCells) {//对数组遍历拿 ...

  7. js和jquery获取属性的区别

    一.获取元素: js获取元素: 根据id获取:document.getElementById("id"); 根据类名获取:document.getElementsByClassNa ...

  8. 九校联考(DL24凉心模拟) 整除(中国剩余定理+原根性质)

    题意简述 给定 \(n, m\),求 \(n|x^m - x\) 在满足 \(x \in [1, n]\) 时合法的 \(x\) 的数量.答案模 \(998244353\).单个测试点包含多组数据. ...

  9. Sklearn,TensorFlow,keras模型保存与读取

    一.sklearn模型保存与读取 1.保存 from sklearn.externals import joblib from sklearn import svm X = [[0, 0], [1, ...

  10. [短期持续更新]Codeforces 构造题一览

    说实话我觉得做这种题很没意思(不够硬核), 可是人有短板终究是要补的...起码这种类型补起来相对简单 所以还是把先前准备好的专题放下吧,做点实现上比较休闲的题 ps.为了精简篇幅,代码全部丢到ubun ...