jquery.fileEveryWhere.js 一个跨浏览器的file显示插件


Posted in Javascript onOctober 24, 2011

先来看看input type="file"在chrome,ie,firefox这三个浏览器下表情各异吧。

jquery.fileEveryWhere.js 一个跨浏览器的file显示插件 

 jquery.fileEveryWhere.js 一个跨浏览器的file显示插件

jquery.fileEveryWhere.js 一个跨浏览器的file显示插件 

chrome像是button+label组合,看起差异最大。

ff和ie,是text+button的组合,就外形来看,firefox更标准,事实上firefox存在两个潜在问题:

 1,firefox对type="file" 的input的width定义目前是不支持的(但是FF支持size属性,可以给size设置一个值,来控制上传框的大小,至于这个size到底是多大,见文章繁花-firefox下input type="file"的size是多大)。 

 2,火狐浏览器的提交file表单时只提交文件名不提交路径,而IE提交的是路径+文件名,chrome也能提交路径+文件名,但只显示文件名。火狐浏览器的提交file表单时只提交文件名不提交路径(很遗憾,暂时没有解决方法)

 

要让file在各个浏览器显示统一,纯样式已经控制不了,只能用js脚本了。基本步骤有3:

 1,通过文本框和按钮去模拟一个input type=”file”。

 2,把input="file"做成透明,用定位完全盖住文本框和按钮。

 3,当input type=”file”的onchange的时,用js将文本框的值设置成input type=”file”的值。

了解步骤后,整个插件就很好写了,代码如下:

/* 
* file everywhere - 浏览器通用文件上传 
* copyright->flowerszhong 
* flowerszhong@gmail.com 
*/ 
(function($) { 
$.fn.fileEveryWhere = function(options) { 
var defaults = { 
WrapWidth: 300, 
WrapHeight: 30, 
ButtonWidth: 60, 
ButtonHeight: 28, 
ButtonText: "浏览", 
TextHeight: 28, 
TextWidth: 240 
}; 
var options = $.extend(defaults, options); 
var browser_ver = $.browser.version.substr(0, 1); 
var displayMode = ($.browser.msie && browser_ver <= "7") ? "inline" : "inline-block"; 
return this.each(function() { 
//创建包含,设置为相对定位 
var wrapper = $("<div class='fileWraper'>") 
.css({ 
"width": options.WrapWidth + "px", 
"height": options.WrapHeight + "px", 
"display": displayMode, 
"zoom": "1", 
"position": "relative", 
"overflow": "hidden", 
"z-index":"1" 
}); 
//创建文本输入框,用于存放上传文件名称 
var text = $('<input class="filename" type="text" />') 
.css({ 
"width": options.TextWidth + "px", 
"heigth": options.TextHeight + "px" 
}); 
//创建浏览按钮 
var button = $('<input class="btnfile" type="button" />') 
.val(options.ButtonText); 
$(this).wrap(wrapper).parent().append(text, button); 
$(this).css({ 
"position": "absolute", 
"top": "0", 
"left": "0", 
"z-index": "2", 
"height": options.WrapHeight + "px", 
"width": options.WrapWidth + "px", 
"cursor": "pointer", 
"opacity": "0.0", 
"outline":"0", 
"filter": "alpha(opacity:0)" 
}); 
if ($.browser.mozilla) { $(this).attr("size", 1 + (options.WrapWidth - 85) / 6.5) } 
$(this).bind("change", function() { 
text.val($(this).val()); 
}); 
}); 
}; 
})(jQuery);

使用很简单:

$("input:file").fileEveryWhere({参数});

这样就可以统一显示input="file",并且易于美化。
下载该插件:jquery.fileEveryWhere.rar
来自:http://www.cnblogs.com/flowerszhong/

Javascript 相关文章推荐
jQuery 白痴级入门教程
Nov 11 Javascript
jquery中获取元素里某一特定子元素的代码
Dec 02 Javascript
JavaScript实现向右伸出的多级网页菜单效果
Aug 25 Javascript
使用jQuery中的wrap()函数操作HTML元素的教程
May 24 Javascript
JavaScript实现图片切换效果
Aug 12 Javascript
利用vue + koa2 + mockjs模拟数据的方法教程
Nov 22 Javascript
JS+HTML+CSS实现轮播效果
Nov 28 Javascript
jquery 获取索引值在一定范围的列表方法
Jan 25 jQuery
跨域解决之JSONP和CORS的详细介绍
Nov 21 Javascript
Vue源码之关于vm.$delete()/Vue.use()内部原理详解
May 01 Javascript
vue 中 elment-ui table合并上下两行相同数据单元格
Dec 26 Javascript
vue+element-ui表格封装tag标签使用插槽
Jun 18 Javascript
editable.js 基于jquery的表格的编辑插件
Oct 24 #Javascript
基于jquery的防止大图片撑破页面的实现代码(立即缩放)
Oct 24 #Javascript
css值转换成数值请抛弃parseInt
Oct 24 #Javascript
更优雅的事件触发兼容
Oct 24 #Javascript
myEvent.js javascript跨浏览器事件框架
Oct 24 #Javascript
最佳的addEvent事件绑定是怎样诞生的
Oct 24 #Javascript
关于javascript function对象那些迷惑分析
Oct 24 #Javascript
You might like
PHP+FastCGI+Nginx配置PHP运行环境
2014/08/07 PHP
php获取当月最后一天函数分享
2015/02/02 PHP
深入浅出php socket编程
2015/05/13 PHP
PHP单例模式详解及实例代码
2016/12/21 PHP
PHP设计模式之模板模式定义与用法详解
2018/12/20 PHP
php实现的数组转xml案例分析
2019/09/28 PHP
javascript 进阶篇3 Ajax 、JSON、 Prototype介绍
2012/03/14 Javascript
js中onload与onunload的使用示例
2013/08/25 Javascript
调用HttpHanlder的几种返回方式小结
2013/12/20 Javascript
javascript函数定义的几种区别小结
2014/01/06 Javascript
javascript将url中的参数加密解密代码
2014/11/17 Javascript
jQuery常用知识点总结以及平时封装常用函数
2016/02/23 Javascript
AngularJS入门教程之Scope(作用域)
2016/07/27 Javascript
Vue2.0组件间数据传递示例
2017/03/07 Javascript
JS基于正则表达式的替换操作(replace)用法示例
2017/04/28 Javascript
JavaScript使用readAsDataURL读取图像文件
2017/05/10 Javascript
M2实现Nodejs项目自动部署的方法步骤
2019/05/05 NodeJs
用不到50行的Python代码构建最小的区块链
2017/11/16 Python
Python解析并读取PDF文件内容的方法
2018/05/08 Python
Django使用Channels实现WebSocket的方法
2019/07/28 Python
django 使用 PIL 压缩图片的例子
2019/08/16 Python
pywinauto自动化操作记事本
2019/08/26 Python
Python笔记之观察者模式
2019/11/20 Python
keras 实现轻量级网络ShuffleNet教程
2020/06/19 Python
详解Python多线程下的list
2020/07/03 Python
Python headers请求头如何实现快速添加
2020/11/03 Python
你可能不熟练的十个前端HTML5经典面试题
2018/07/03 HTML / CSS
美国领先的宠物用品和宠物食品零售商:Petco
2020/10/28 全球购物
大一军训感言
2014/01/09 职场文书
生产部厂长职位说明书
2014/03/03 职场文书
项目施工员岗位职责
2014/03/09 职场文书
小学生手册家长评语
2014/04/16 职场文书
私营公司诉讼代理委托书范本
2014/09/13 职场文书
给客户的检讨书
2014/12/21 职场文书
实习员工转正的评语汇总,以备不时之需
2019/12/17 职场文书
GO中sync包自由控制并发示例详解
2022/08/05 Golang