1.介绍css
在开发中,文件上传必不可少,input[type=file] 是经常使用的上传标签,可是它长得又丑、浏览的字样不能换,可是他长获得底有多丑呢。咱们来看看在不一样浏览器里的样子吧。html
<input type="file" name="" id="" value="" />
谷歌:jquery
IE:git
FF:github
看到了。在不一样浏览器里他是不一样的样式。做为有强迫症的同窗有没有以为看不下去了。既然长得这么丑,那么咱们就有必要要给它化妆了。浏览器
2.如何美化input[type=file] 框安全
思路是这样的:既然长的丑就不要见人了,藏起来ide
input file上传按钮的美化思路是,先把以前的按钮透明度opacity设置为0,而后,外层用div包裹,就实现了美化功能。post
来看看第一个:编码
<a class="a-upload"> <input type="file" name="" id="">点击这里上传文件 </a>
.a-upload { padding: 4px 10px; height: 20px; line-height: 20px; position: relative; cursor: pointer; color: #888; background: #fafafa; border: 1px solid #ddd; border-radius: 4px; overflow: hidden; display: inline-block; *display: inline; *zoom: 1 } .a-upload input { position: absolute; font-size: 100px; right: 0; top: 0; opacity: 0; filter: alpha(opacity=0); cursor: pointer }
看。如今样式统一了吧。有没有摇身一变;
在看下一个:
<a class="file">选择文件 <input type="file" name="" id=""> </a>
.file { position: relative; display: inline-block; background: #D0EEFF; border: 1px solid #99D3F5; border-radius: 4px; padding: 4px 12px; overflow: hidden; color: #1E88C7; text-decoration: none; text-indent: 0; line-height: 20px; } .file input { position: absolute; font-size: 100px; right: 0; top: 0; opacity: 0; } .file:hover { background: #AADFFD; border-color: #78C3F3; color: #004974; text-decoration: none; }
既然变漂亮了。那咱们也该让它接活干了
3.input[type=file]是干吗的?建立文件上载控件,该控件带有一个文本框和一个浏览按钮。
使用input[type=file]时要注意必定要包裹在form表单内部,form表单要声明编码类型enctype="multipart/form-data"。
4.属性
input file类型控件有一个属性,名为accept
, 是用来来指定浏览器接受的文件类型,也就是的那个咱们打开系统的选择文件弹框的时候,默认界面中呈现的文件类型。例如:accept="image/jpeg"
,则界面中只有jpg图片,以下截图,同时,窗体右下方是“自定义文件”按钮:
<input type="file" name="" id="" accept="image/jpeg">
accept 属性只能与 <input type="file"> 配合使用。
多个属性一块儿使用,使用逗号分隔。<input accept="audio/*|video/*|image/*|MIME_type">
常见的属性值
audio/* 接受全部的声音文件。
video/* 接受全部的视频文件。
image/* 接受全部的图像文件。
MIME_type 一个有效的 MIME 类型,不带参数。请参阅 IANA MIME 类型,得到标准 MIME 类型的完整列表。
5.上传前预览和Ajax传输
尤为在作图片上传时,咱们会用到预览。在HTML5还没出现的旧时代,只有低版本的IE浏览器貌似有方法,使用私有的滤镜,超越安全的限制(实际上是利用了很差的东西),实现图片直接预览;可是呢,那个时候,Chrome, FireFox没有这一出,因而,想要使用原生file input实现图片的上传前预览,兼容性坎很难跨过去。随着H5出现。可让咱们直接读取图片的数据,而后在页面上呈现,实现了上传前预览。对低版本的IE则可使用滤镜去兼容。
传统的form表单提交后,页面刷新后跳转。使用Ajax让用户有了跟好的体验。HTML5里面支持二进制formData数据提交,所以,能够从容Ajax提交上传的文件数据;那老旧的IE浏览器怎么办?
通常方法以下:(此处复制)
target
属性,其值指向页面内隐藏的一个<iframe>
元素的id
, 以下示意:
<form action="" method="post" enctype="multipart/form-data" target="uploadIframe">< <iframe id="uploadIframe"></iframe>
<iframe>
元素的onload
事件,得到返回内容(以下代码示意),具体细节非本文重点,不表。
var doc = iframe.contentDocument ? iframe.contentDocument : frames[iframe.id].document; var response = doc.body && doc.body.innerHTML;
OK, 固然,你也能够不用像上面这么麻烦,直接使用jquery.form.js. 原理呢,就是上面这样,可是,不须要这么麻烦。