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 相关文章推荐
远离JS灾难css灾难之 js私有函数和css选择器作为容器
Dec 11 Javascript
JS 跳转页面延迟2种方法
Mar 29 Javascript
Javascript倒计时页面跳转实例小结
Sep 11 Javascript
JS获取浏览器语言动态加载JS文件示例代码
Oct 31 Javascript
jQuery实现响应鼠标背景变化的动态菜单效果代码
Aug 27 Javascript
JavaScript_object基础入门(必看篇)
Jun 13 Javascript
基于Vuejs实现购物车功能
Aug 02 Javascript
通过命令行生成vue项目框架的方法
Jul 12 Javascript
浅谈react+es6+webpack的基础配置
Aug 09 Javascript
JS实现快速比较两个字符串中包含有相同数字的方法
Sep 11 Javascript
JavaScript指定断点操作实例教程
Sep 18 Javascript
JS添加或删除HTML dom元素的方法实例分析
Mar 05 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
PHP Array交叉表实现代码
2010/08/05 PHP
提高php运行速度的一些小技巧分享
2012/07/03 PHP
PHP封装的一个支持HTML、JS、PHP重定向的多功能跳转函数
2014/06/19 PHP
thinkphp配置连接数据库技巧
2014/12/02 PHP
php+resumablejs实现的分块上传 断点续传功能示例
2017/04/18 PHP
Laravel框架控制器的request与response用法示例
2019/09/30 PHP
JavaScript学习笔记之获取当前目录的实现代码
2010/12/14 Javascript
JavaScript之HTMLCollection接口代码
2011/04/27 Javascript
javascript jq 弹出层实例
2013/08/25 Javascript
jQuery判断对象是否存在的方法
2015/02/05 Javascript
js实现简单选项卡与自动切换效果的方法
2015/04/10 Javascript
日常收藏的jquery技巧
2015/12/02 Javascript
Javascript实现的StopWatch功能示例
2017/06/13 Javascript
微信小程序实现列表页的点赞和取消点赞功能
2018/11/02 Javascript
Element input树型下拉框的实现代码
2018/12/21 Javascript
使用vue-cli3 创建vue项目并配置VS Code 自动代码格式化 vue语法高亮问题
2019/05/14 Javascript
JavaScript装饰者模式原理与用法实例详解
2020/03/09 Javascript
[01:22]DOTA2神秘商店携大量周边降临完美大师赛
2017/11/07 DOTA
Python通过RabbitMQ服务器实现交换机功能的实例教程
2016/06/29 Python
Python插件virtualenv搭建虚拟环境
2017/11/20 Python
python输入错误密码用户锁定实现方法
2017/11/27 Python
python常量折叠基础知识点讲解
2021/02/28 Python
CSS3实现王者匹配时的粒子动画效果
2019/04/12 HTML / CSS
Mamas & Papas沙特阿拉伯:英国最受欢迎的婴儿品牌
2017/11/20 全球购物
英国领先的家庭时尚品牌:Peacocks
2018/01/11 全球购物
意大利领先的奢侈品在线时装零售商:MCLABELS
2020/10/13 全球购物
中专生自我鉴定
2013/12/17 职场文书
高校十八大报告感想
2014/01/27 职场文书
高中军训的心得体会
2014/09/01 职场文书
大学生党员学习焦裕禄精神思想汇报
2014/09/10 职场文书
2014年化妆品销售工作总结
2014/12/01 职场文书
入党积极分子党小组意见
2015/06/02 职场文书
安全主题班会教案
2015/08/12 职场文书
《作风建设永远在路上》心得体会
2016/01/21 职场文书
一波干货,会议主持词开场白范文
2019/05/06 职场文书
go开发alertmanger实现钉钉报警
2021/07/16 Golang