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使用查询手册
Mar 07 Javascript
js实现倒计时(距离结束还有)示例代码
Jul 24 Javascript
js脚本分页代码分享(7种样式)
Aug 19 Javascript
javascript断点调试心得分享
Apr 23 Javascript
基于jQuery实现页面搜索功能
Mar 26 Javascript
Bootstrap模态框(modal)垂直居中的实例代码
Aug 18 Javascript
jquery事件绑定解绑机制源码解析
Sep 19 Javascript
详解js 创建对象的几种方法
Mar 08 Javascript
如何用webpack4.0撸单页/多页脚手架 (jquery, react, vue, typescript)
Jun 18 jQuery
layui当点击文本框时弹出选择框,显示选择内容的例子
Sep 02 Javascript
js中script的上下放置区别,Dom的增删改创建操作实例分析
Dec 16 Javascript
详解vue实现坐标拾取器功能示例
Nov 18 Vue.js
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递归调用的小技巧讲解
2013/02/19 PHP
php缓冲 output_buffering和ob_start使用介绍
2014/01/30 PHP
php实现快速排序的三种方法分享
2014/03/12 PHP
PHP+AJAX实现投票功能的方法
2015/09/28 PHP
[原创]php使用curl判断网页404(不存在)的方法
2016/06/23 PHP
jquery仿京东导航/仿淘宝商城左侧分类导航下拉菜单效果
2013/04/24 Javascript
js replace 与replaceall实例用法详解
2013/08/03 Javascript
给easyui的datebox控件添加清空按钮的实现方法
2016/11/09 Javascript
bootstrap weebox 支持ajax的模态弹出框
2017/02/23 Javascript
轻松学习Javascript闭包
2017/03/01 Javascript
javascript深拷贝的原理与实现方法分析
2017/04/10 Javascript
微信小程序图片横向左右滑动案例
2017/05/19 Javascript
canvas轨迹回放功能实现
2017/12/20 Javascript
微信小程序异步API为Promise简化异步编程的操作方法
2018/08/14 Javascript
如何基于javascript实现贪吃蛇游戏
2020/02/09 Javascript
python实现根据ip地址反向查找主机名称的方法
2015/04/29 Python
使用Python对MySQL数据操作
2017/04/06 Python
Python字典的概念及常见应用实例详解
2019/10/30 Python
python3获取文件中url内容并下载代码实例
2019/12/27 Python
python GUI库图形界面开发之PyQt5访问系统剪切板QClipboard类详细使用方法与实例
2020/02/27 Python
把Anaconda中的环境导入到Pycharm里面的方法步骤
2020/10/30 Python
Python Unittest原理及基本使用方法
2020/11/06 Python
解决Pyinstaller打包软件失败的一个坑
2021/03/04 Python
html5标记文字_动力节点Java学院整理
2017/07/11 HTML / CSS
高级工程师岗位职责
2013/12/15 职场文书
汽车技术服务英文求职信范文
2014/01/02 职场文书
综合实践教学反思
2014/01/31 职场文书
军训考核自我鉴定
2014/02/13 职场文书
桥梁工程专业求职信
2014/04/21 职场文书
中学优秀班主任事迹材料
2014/05/01 职场文书
中国梦演讲稿范文
2014/08/28 职场文书
2014年幼儿园园长工作总结
2014/12/17 职场文书
幼儿园大班个人总结
2015/02/28 职场文书
详解Python内置模块Collections
2022/03/22 Python
浅谈Node的内存泄露问题
2022/05/06 NodeJs
Python中的socket网络模块介绍
2022/07/23 Python