JavaScript - 表单提交前预览图片属性

即Preview image and its properties before upload

其实这东西网上到处都是,但并不完整。

正好我也遇到了这个问题,不仅仅是预览,还需要得到图片的属性。

于是东凑西凑整理出一个完整的版本,并根据个人的理解加上了一点点说明。

(ps:感谢爆栈^^)

首先做一些准备工作,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对象恰好可以解决这个问题,

(ps:关于FileReader的说明,传送门-->http://www.javascripture.com/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="‘+ "http://blog.51cto.com/viewpic.php?refimg=" + 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 - 表单提交前预览图片属性

时间: 2024-12-12 05:23:54

JavaScript - 表单提交前预览图片属性的相关文章

JS控制submit表单提交前进行预览和confirm确认提交

JS控制submit表单提交前进行预览和confirm确认提交. 我们经常会遇到这样的场景,某一个form表单提交前,想知道那些checkbox的内容被选中了,如果符合则提交,如果不符合,则取消提交,很简单的代码,我就不说了,直接上代码了. <script type="text/jscript"> $(document).ready(function() { //alert($("input[name='xinjiu']:checked").val())

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

1.今天要做一个手机验证码验证的功能.需求是前端页面点击发送 短信验证码,后台接收后通过ajax返回到前端,之后前端在提交时候进行验证.思路很简单,不过做的过程还是学到不少的东西. 1.ajax请求后返回 returning 405 Method Not Allowed 原因是我后台返回的时候没有加上: @ResponseBody注解.加上后返回的数据是json字符串,但是js只能操作json对象.需要把json字符串转为json对象.一般的有三种方式1.JSON.parse();如 var j

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

<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>菜鸟教程(runoob.com)</title> <script type="text/javascript"> function save(){ alert("拦截a标签的href请求提交1"); <!--此处仅仅模拟表单提交前的验证过程

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

连续2天,在进行form表单包括上传表单的提交操作时,刚开始用struts2自带的上传模式与后台进行交互,但原来的页面是用html做的,不能通过国际化资源来返回后台操作的错误信息于静态的html,之后我又百度了许多ajax异步与后台交互的方法,如ajaxForm,ajaxSubmit,ajaxFileUpload等,用的是心力交瘁,各种错误抛出,然后还尝试easyui的表单提交,还是不成...这一切的目的都是为了实现异步交互,不让当前页面跳转,使用ajax实现文件上传的异步刷新,最后还是死心了,

Html form 表单提交前验证

可以使用form表单的onsubmit方法,在提交表单之前,对表单或者网页中的数据进行检验. onsubmit指定的方法返回true,则提交数据:返回false不提交数据. 直接看下面的代码: 1 <HTML> 2 <head> 3 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 4 </head> 5 <BODY>

js 在表单提交前进行操作

最近在写页面的时候,需要手动写一些在表单进行提交前的验证操作,正好看到了2种阻止表单提交的方法,可以进行一些逻辑处理 方法一:使用return false 原生js写法: <form id="loginForm" name="loginForm" action="login.aspx" method="post"> <button type="submit" value="Sub

plupload上传前预览图片

plupload预览图片有多种方法,主要由moxie的Image提供,Image的downsize.crop.embed都可用来预览图片 1.downsize 最开始做项目的时候,我用的就是downsize来做预览图片 downsize(opts) Downsizes the image to fit the specified width/height. If crop is supplied, image will be cropped to exact dimensions. Argume

easyui 表单提交前的 confirm 处理

最近学习用 easyui,异步提交表单是遇到一个小问题 $('#fModiDetail').form('submit',{ url:'...', onSubmit:function(){ if($(this).form('validate')){ return $.messager.confirm('?','确定要保存吗?', function(r){ return r; }); success:function(data){ //... }; 以上代码在表单验证成功后,确认对话框尽管也会弹出来

表单保存和预览功能

有的时候,我们的表单,除了保存(submit)的功能还需要预览的功能,我们要如何实现呢 分析:预览功能,即仅仅获取表单内容,而又不做[保存]处理,将预览的内容在弹框或者新页面展示. 下面的介绍的方法是在新页面预览: 1.form表单有个属性target,和a标签一样.我们可以设置target="_blank"来实现在新页面展示获取到的表单的内容. 2.在表单中增加一条提交类型的input,在action中,我们可以通过类型value来判断该次提交时保存还是预览. 当我们点击[保存]时,