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 相关文章推荐
javascript转换字符串为dom对象(字符串动态创建dom)
May 10 Javascript
在Ajax中使用Flash实现跨域数据读取的实现方法
Dec 02 Javascript
javascript游戏开发之《三国志曹操传》零部件开发(一)让静态人物动起来
Jan 23 Javascript
Jquery实现三层遍历删除功能代码
Apr 23 Javascript
javascript数组遍历for与for in区别详解
Dec 04 Javascript
js控制页面的全屏展示和退出全屏显示的方法
Mar 10 Javascript
Document.body.scrollTop的值总为零的快速解决办法
Jun 09 Javascript
vue 打包后的文件部署到express服务器上的方法
Aug 09 Javascript
JS实现可针对算术表达式求值的计算器功能示例
Sep 04 Javascript
Node.js的进程管理的深入理解
Jan 09 Javascript
vuex实现数据状态持久化
Nov 11 Javascript
Javascript confirm多种使用方法解析
Sep 25 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
农民和部队如何穿矿
2020/03/04 星际争霸
PHP5.0正式发布 不完全兼容PHP4 新增多项功能
2006/10/09 PHP
php空间不支持socket但支持curl时recaptcha的用法
2011/11/07 PHP
Thinkphp5+Redis实现商品秒杀代码实例讲解
2020/12/29 PHP
JavaScript Event学习第六章 事件的访问
2010/02/07 Javascript
主页面中的两个iframe实现鼠标拖动改变其大小
2013/04/16 Javascript
JQuery设置和去除disabled属性的5种方法总结
2013/05/16 Javascript
js实现广告漂浮效果的小例子
2013/07/02 Javascript
深入理解Javascript中this的作用域
2014/08/12 Javascript
js实现向右横向滑出的二级菜单效果
2015/08/27 Javascript
JavaScript记录光标在编辑器中位置的实现方法
2016/04/22 Javascript
怎么限制input的text里输入的值只能是数字(正则、js)
2016/05/16 Javascript
jQuery插件pagination实现无刷新分页
2016/05/21 Javascript
jQuery实现鼠标跟随效果
2017/02/20 Javascript
详解使用fetch发送post请求时的参数处理
2017/04/05 Javascript
react开发教程之React 组件之间的通信方式
2017/08/12 Javascript
小程序日历控件使用方法详解
2018/12/29 Javascript
使用VueCli3+TypeScript+Vuex一步步构建todoList的方法
2019/07/25 Javascript
jquery插件懒加载的示例
2020/10/24 jQuery
Js利用正则表达式去除字符串的中括号
2020/11/23 Javascript
[01:04:01]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS DT第一场
2014/05/24 DOTA
python遍历文件夹并删除特定格式文件的示例
2014/03/05 Python
用PyQt进行Python图形界面的程序的开发的入门指引
2015/04/14 Python
Python实现的特征提取操作示例
2018/12/03 Python
学习和使用python的13个理由
2019/07/30 Python
Jupyter加载文件的实现方法
2020/04/14 Python
python 实现朴素贝叶斯算法的示例
2020/09/30 Python
澳大利亚潮流尖端的快时尚品牌:Cotton On
2016/09/26 全球购物
澳大利亚最大的百货公司:Myer
2018/12/21 全球购物
美国社交购物市场:MassGenie
2019/02/18 全球购物
UNOde50美国官网:西班牙珠宝品牌
2020/08/15 全球购物
.net面试题
2016/09/17 面试题
签约仪式主持词
2014/03/19 职场文书
2014离婚协议书范文
2014/09/10 职场文书
2015中秋节慰问信范文
2015/03/23 职场文书
十二月早安励志心语大全
2019/12/03 职场文书