js 实现 input type="file" 文件上传示例代码


Posted in Javascript onAugust 07, 2013

在开发中,文件上传必不可少,<input type="file" /> 是常用的上传标签,但是它长得又丑、浏览的字样不能换,我们一般会用让,<input type="file" />隐藏,点其他的标签(图片等)来时实现选择文件上传功能。
看代码:

<!DOCTYPE html> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<script src="js/jquery/jquery-1.8.2.min.js" type="text/javascript"></script> 
<style type="text/css"> 
._box 
{ 
width: 119px; 
height: 37px; 
background-color: #53AD3F; 
background-image: url(images/bg.png); 
background-repeat: no-repeat; 
background-position: 0 0; 
background-attachment: scroll; 
line-height: 37px; 
text-align: center; 
color: white; 
cursor: pointer; 
} 
.none 
{ 
width: 0px; 
height: 0px; 
display: none; 
} 
</style> 
<title>js 实现 input file 文件上传 /></title> 
</head> 
<body> 
<form id="form1" runat="server" method="post" enctype="multipart/form-data"> 
<div> 
<div class="_box">选择图片</div> 
</div> 
<div class="none"> 
<input type="file" name="_f" id="_f" /> 
</div> 
</form> 
</body> 
</html> 
<script type="text/javascript"> 
jQuery(function () { 
$("._box").click(function () { 
$("#_f").click(); 
}); 
}); 
</script>

但是在火狐和一些高版本的浏览器中后台可以获取到要上传的文件,一些低版本的浏览器压根就获取不到Request.Files
查阅资料,有说改成这样的:
<!DOCTYPE html> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<script src="js/jquery/jquery-1.8.2.min.js" type="text/javascript"></script> 
<style type="text/css"> 
._box 
{ 
width: 119px; 
height: 37px; 
background-color: #53AD3F; 
background-image: url(images/bg.png); 
background-repeat: no-repeat; 
background-position: 0 0; 
background-attachment: scroll; 
line-height: 37px; 
text-align: center; 
color: white; 
cursor: pointer; 
} 
.none 
{ 
width: 0px; 
height: 0px; 
display: none; 
} 
</style> 
<title>js 实现 input file 文件上传 /></title> 
</head> 
<body> 
<form id="form1" runat="server" method="post" enctype="multipart/form-data"> 
<div> 
<div class="_box">选择图片</div> 
</div> 
<div class="none"> 
<input type="file" name="_f" id="_f" /> 
</div> 
</form> 
</body> 
</html> 
<script type="text/javascript"> 
jQuery(function () { 
$("._box").click(function () { 
return $("#_f").click(); 
}); 
}); 
</script>

加了一个return关键字,兼容性提高了不少,但是有的浏览器还是不好用。
我们发现只有手动点击<input type="file" />后台就一定能获取到要上传的文件
于是我们可以透明<input type="file" />
修改代码如下:
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<style type="text/css"> 
._box 
{ 
position: relative; 
width: 119px; 
height: 37px; 
background-color: #53AD3F; 
background-image: url(images/bg.png); 
background-repeat: no-repeat; 
background-position: 0 0; 
background-attachment: scroll; 
line-height: 37px; 
text-align: center; 
color: white; 
cursor: pointer; 
overflow: hidden; 
z-index: 1; 
} 
._box input 
{ 
position: absolute; 
width: 119px; 
height: 40px; 
line-height: 40px; 
font-size: 23px; 
opacity: 0; 
filter: "alpha(opacity=0)"; 
filter: alpha(opacity=0); 
-moz-opacity: 0; 
left: -5px; 
top: -2px; 
cursor: pointer; 
z-index: 2; 
} 
</style> 
<title>js 实现 input file 文件上传 /></title> 
</head> 
<body> 
<form id="form1" runat="server" method="post" enctype="multipart/form-data"> 
<div> 
<div class="_box"> 
<input type="file" name="_f" id="_f" /> 
选择图片 
</div> 
</div> 
</form> 
</body> 
</html>

我们点击选择图片实际点击了不透明度为0的 <input type="file" />,单用户切看不到 <input type="file" />后台亦可以获取到要上传的文件了。
ok
总结:
用一个不透明度为0的 <input type="file" />盖在要用户可见的标签(或图片等)上,让用户点击。
用 width height line-height font-size 来控制<input type="file" />右侧浏览按钮的大小。
用 left top (right 、 bottum)来控制<input type="file" />右侧浏览按钮的位置,可以设置为负值。
用z-index来设置它们的层覆盖关系。
form 必须有enctype="multipart/form-data"标记才能上传文件
Javascript 相关文章推荐
Vue.js每天必学之构造器与生命周期
Sep 05 Javascript
聊一聊Vue.js过渡效果
Sep 07 Javascript
javascript数组常用方法汇总
Sep 10 Javascript
完美解决node.js中使用https请求报CERT_UNTRUSTED的问题
Jan 08 Javascript
JS实现的简单拖拽购物车功能示例【附源码下载】
Jan 03 Javascript
vue初始化动画加载的实例
Sep 01 Javascript
vue3.0 CLI - 3.2 路由的初级使用教程
Sep 20 Javascript
js 根据对象数组中的属性进行排序实现代码
Sep 12 Javascript
js中forEach,for in,for of循环的用法示例小结
Mar 14 Javascript
JS实现进度条动态加载特效
Mar 25 Javascript
使用 Jest 和 Supertest 进行接口端点测试实例详解
Apr 25 Javascript
解决removeEventListener 无法清除监听的问题
Oct 30 Javascript
uploadify在Firefox下丢失session问题的解决方法
Aug 07 #Javascript
firefox浏览器不支持innerText的解决方法
Aug 07 #Javascript
javascript的内存管理详解
Aug 07 #Javascript
javaScript函数中执行C#代码中的函数方法总结
Aug 07 #Javascript
JS 按钮点击触发(兼容IE、火狐)
Aug 07 #Javascript
js 编码转换 gb2312 和 utf8 互转的2种方法
Aug 07 #Javascript
Javascript页面添加到收藏夹的简单方法
Aug 07 #Javascript
You might like
利用递归把多维数组转为一维数组的函数
2006/10/09 PHP
php empty() 检查一个变量是否为空
2011/11/10 PHP
老鱼 浅谈javascript面向对象编程
2010/03/04 Javascript
jquery 操作日期、星期、元素的追加的实现代码
2012/02/07 Javascript
Js实现当前点击a标签变色突出显示其他a标签回复原色
2013/11/27 Javascript
javascript实现dom动态创建省市纵向列表菜单的方法
2015/05/14 Javascript
无刷新上传文件并返回自定义值
2015/06/11 Javascript
jQuery实现选中行变色效果(实例讲解)
2017/07/06 jQuery
angularJS实现动态添加,删除div方法
2018/02/27 Javascript
js中Object.defineProperty()方法的不详解
2018/07/09 Javascript
iconfont的三种使用方式详解
2018/08/05 Javascript
jQuery超简单遮罩层实现方法示例
2018/09/06 jQuery
vue实现动态显示与隐藏底部导航的方法分析
2019/02/11 Javascript
vue实现多组关键词对应高亮显示功能
2019/07/25 Javascript
Python实现抓取网页并且解析的实例
2014/09/20 Python
python 时间戳与格式化时间的转化实现代码
2016/03/23 Python
20行python代码实现人脸识别
2019/05/05 Python
用django-allauth实现第三方登录的示例代码
2019/06/24 Python
Python PyQt5整理介绍
2020/04/01 Python
Python判断三段线能否构成三角形的代码
2020/04/12 Python
Python面向对象特殊属性及方法解析
2020/09/16 Python
Bootstrap 学习分享
2012/11/12 HTML / CSS
介绍一下gcc特性
2015/10/31 面试题
使用Vue.js和MJML创建响应式电子邮件
2021/03/23 Vue.js
入党申请人的自我鉴定
2013/12/01 职场文书
求职者怎样写自荐信
2014/04/13 职场文书
艾滋病宣传活动总结
2014/05/08 职场文书
法学自荐信
2014/06/20 职场文书
七夕活动策划方案
2014/08/16 职场文书
自愿离婚协议书范本
2014/09/13 职场文书
2014年幼师工作总结
2014/11/22 职场文书
2015年业务工作总结范文
2015/04/10 职场文书
高中家长意见怎么写
2015/06/03 职场文书
PL350与SW11的比较
2021/04/22 无线电
Python趣味挑战之实现简易版音乐播放器
2021/05/28 Python
Redis高并发缓存架构性能优化
2022/05/15 Redis