jquery.fileEveryWhere.js 一个跨浏览器的file显示插件
2018-10-12 14:00
731 查看
先来看看input type="file"在chrome,ie,firefox这三个浏览器下表情各异吧。
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/
您可能感兴趣的文章:
- Vue.js报错Failed to resolve filter问题的解决方法
- JavaScript 数组some()和filter()的用法及区别
- JavaScript中的some()方法使用详解
- Some tips of wmi scripting in jscript (1)
- 详解JavaScript中的every()方法
- 详解JavaScript中的forEach()方法的使用
- js的for in循环和java里foreach循环的区别分析
- js中的for如何实现foreach中的遍历
- 全面解析JavaScript里的循环方法之forEach,for-in,for-of
- 浅析JS中的 map, filter, some, every, forEach, for in, for of 用法总结
相关文章推荐
- jquery.fileEveryWhere.js--一个跨浏览器的file显示插件[原]
- jquery.fileEveryWhere.js 一个跨浏览器的file显示插件
- history.js 一个无刷新就可改变浏览器栏地址的插件(不依赖jquery)
- 一个简单的jQuery插件ajaxfileupload.js实现ajax上传文件例子
- 一个简单的jQuery插件ajaxfileupload.js实现ajax上传文件例子
- 跨浏览器的placeholder-jQuery版(jQuery插件EnPlaceholder,实现默认显示表单元素的焦点值)
- Jquery 类似新浪微博,鼠标移到头像,用浮动窗口显示用户信息,已做成一个jquery插件
- jquery.fileupload.js插件使用--前两篇日志中两个类的使用示例
- ZeroClipboard / jquery.zclip.min.js跨浏览器复制插件使用中遇到的问题解决
- jquery ajaxFileUpload.js插件支持多文件上传的方法
- 一个简单的页面弹窗插件 jquery.pageMsgFrame.js
- 一个简单的jQuery插件ajaxfileupload实现ajax上传文件例子
- jquery.cookie.js插件一个小bug
- jquery插件--ajaxfileupload.js上传文件原理分析
- jQuery插件:toggleElements.js,隐藏/显示层的折叠效果插件
- jQuery 关于ajaxfileupload.js插件的逐步解析(ajaxfileupload.js第二弹) 推荐
- jQuery.form.js是一个form插件,支持ajax表单提交和ajax文件上传。
- ****timeago.js插件:jquery实现几分钟前、几小时前、几天前等时间差显示效果的代码实例
- jquery判断浏览器版本插件,jquery-browser.js
- Jquery的validate,清除form方法,显示密插件,正则特殊字符处理,js的call用法,ajax,h5支持情况,elclipse tomcate去掉项目名,js 的原型