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操作JSON实例代码
Feb 09 Javascript
jQuery版Tab标签切换
Mar 16 Javascript
jquery 操作日期、星期、元素的追加的实现代码
Feb 07 Javascript
详解javascript new的运行机制
Jan 26 Javascript
javascript移动开发中touch触摸事件详解
Mar 18 Javascript
AngularJS基础 ng-init 指令简单示例
Aug 02 Javascript
jQuery-mobile事件监听与用法详解
Nov 23 Javascript
JS实现图片放大缩小的方法
Feb 15 Javascript
网页中的图片查看器viewjs使用方法
Jul 11 Javascript
jQuery常用选择器详解
Jul 17 jQuery
layui文件上传控件带更改后数据传值的方法
Sep 23 Javascript
小程序瀑布流组件实现翻页与图片懒加载
May 19 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
function.inc.php超越php
2006/12/09 PHP
一个简单php扩展介绍与开发教程
2010/08/19 PHP
thinkphp实现多语言功能(语言包)
2014/03/04 PHP
PHP基于DateTime类解决Unix时间戳与日期互转问题【针对1970年前及2038年后时间戳】
2018/06/13 PHP
firefox下input type=&quot;file&quot;的size是多大
2011/10/24 Javascript
jquery实现excel导出的方法
2013/04/04 Javascript
php is_numberic函数造成的SQL注入漏洞
2014/03/10 Javascript
javascript的日期对象、数组对象、二维数组使用说明
2014/12/22 Javascript
jQuery中cookie插件用法实例分析
2015/12/04 Javascript
jQuery短信验证倒计时功能实现方法详解
2016/05/25 Javascript
jQuery简单自定义图片轮播插件及用法示例
2016/11/21 Javascript
解析jQueryEasyUI的使用
2016/11/22 Javascript
jquery,js简单实现类似Angular.js双向绑定
2017/01/13 Javascript
浅谈JavaScript正则表达式-非捕获性分组
2017/03/08 Javascript
Bootstrap实现下拉菜单多级联动
2017/11/23 Javascript
vue.js数据绑定操作详解
2018/04/23 Javascript
vue柱状进度条图像的完美实现方案
2019/08/26 Javascript
Node.js 在本地生成日志文件的方法
2020/02/07 Javascript
[56:24]DOTA2上海特级锦标赛主赛事日 - 3 胜者组第二轮#1Liquid VS MVP.Phx第二局
2016/03/04 DOTA
[51:14]LGD vs VP 2018国际邀请赛淘汰赛BO3 第一场 8.21
2018/08/22 DOTA
Python实现从log日志中提取ip的方法【正则提取】
2018/03/31 Python
解决python给列表里添加字典时被最后一个覆盖的问题
2019/01/21 Python
python的schedule定时任务模块二次封装方法
2019/02/19 Python
Python 中@property的用法详解
2020/01/15 Python
python实现高斯投影正反算方式
2020/01/17 Python
Python3中的f-Strings增强版字符串格式化方法
2020/03/04 Python
基于CSS3的animation属性实现微信拍一拍动画效果
2020/06/22 HTML / CSS
北美女性服装零售连锁店:maurices
2019/06/12 全球购物
德国家具折扣店:POCO
2020/02/28 全球购物
Java语言程序设计测试题判断题部分
2013/01/06 面试题
医学检验专业大学生求职信
2013/11/18 职场文书
如何写自我鉴定
2014/03/19 职场文书
旅游局领导班子“四风”问题对照检查材料思想汇报
2014/09/29 职场文书
我们的节日端午节活动总结
2015/02/11 职场文书
新手必备Python开发环境搭建教程
2021/05/28 Python
uni-app 微信小程序授权登录的实现步骤
2022/02/18 Javascript