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 相关文章推荐
javascript打印大全(打印页面设置/打印预览代码)
Mar 29 Javascript
js和html5实现手机端刮刮卡抽奖效果完美兼容android/IOS
Nov 18 Javascript
js点击事件链接的问题解决
Apr 25 Javascript
原生js封装二级城市下拉列表的实现代码
Jun 16 Javascript
BootStrap Typeahead自动补全插件实例代码
Aug 10 Javascript
老生常谈javascript中逻辑运算符&amp;&amp;和||的返回值问题
Apr 13 Javascript
vue2.0移除或更改的一些东西(移除index key)
Aug 28 Javascript
JQuery实现table中tr上移下移的示例(超简单)
Jan 08 jQuery
详解js的视频和音频采集
Aug 09 Javascript
用原生 JS 实现 innerHTML 功能实例详解
Apr 03 Javascript
vue动态绑定class的几种常用方式小结
May 21 Javascript
40行代码把Vue3的响应式集成进React做状态管理
May 20 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
php5 and xml示例
2006/11/22 PHP
PHP采用超长(超大)数字运算防止数字以科学计数法显示的方法
2016/04/01 PHP
检测是否已安装 .NET Framework 3.5的js脚本
2009/02/14 Javascript
用jquery ajax获取网站Alexa排名的代码
2009/12/12 Javascript
JQuery的$和其它JS发生冲突的快速解决方法
2014/01/24 Javascript
js构造函数、索引数组和属性的实现方式和使用
2014/11/16 Javascript
纯Javascript实现ping功能的方法
2015/03/20 Javascript
JavaScript中pop()方法的使用教程
2015/06/09 Javascript
Bootstrap入门书籍之(五)导航条、分页导航
2016/02/17 Javascript
vue 界面刷新数据被清除 localStorage的使用详解
2018/09/16 Javascript
ES7之Async/await的使用详解
2019/03/28 Javascript
ES6中的class是如何实现的(附Babel编译的ES5代码详解)
2019/05/17 Javascript
Vue中实现权限控制的方法示例
2019/06/07 Javascript
vscode中的vue项目报错Property ‘xxx‘ does not exist on type ‘CombinedVueInstance<{ readyOnly...Vetur(2339)
2020/09/11 Javascript
js前端传json后台接收‘‘被转为quot的问题解决
2020/11/12 Javascript
Python算法之栈(stack)的实现
2014/08/18 Python
在python中使用正则表达式查找可嵌套字符串组
2017/10/24 Python
python 中文件输入输出及os模块对文件系统的操作方法
2018/08/27 Python
使用 Python 实现简单的 switch/case 语句的方法
2018/09/17 Python
Python内存管理实例分析
2019/07/10 Python
Python对接 xray 和微信实现自动告警
2019/09/17 Python
Python实现直播推流效果
2019/11/26 Python
pandas实现DataFrame显示最大行列,不省略显示实例
2019/12/26 Python
python 的topk算法实例
2020/04/02 Python
Selenium结合BeautifulSoup4编写简单的python爬虫
2020/11/06 Python
师说教学反思
2014/02/07 职场文书
《春雨》教学反思
2014/04/24 职场文书
2014年商场国庆节活动策划方案
2014/09/16 职场文书
科级干部群众路线教育实践活动对照检查材料思想汇报
2014/09/20 职场文书
后进基层党组织整改方案
2014/10/25 职场文书
2016新年致辞
2015/08/01 职场文书
化验室安全管理制度
2015/08/06 职场文书
MySQL入门命令之函数-单行函数-流程控制函数
2021/04/05 MySQL
微信小程序中wxs文件的一些妙用分享
2022/02/18 Javascript
PO模式在selenium自动化测试框架的优势
2022/03/20 Python
解决Windows Server2012 R2 无法安装 .NET Framework 3.5
2022/04/29 Servers