自制的文件上传JS控件可支持IE、chrome、firefox etc


Posted in Javascript onApril 18, 2014
(function() { 
if (window.FileUpload) { 
return; 
} 
window.FileUpload = function (id, url) { 
this.id = id; 
this.autoUpload = true; 
this.url = url; 
this.maxSize = null; 
this.extensions = null; 
this.dropId = null; 
}; window.FileUpload.prototype.init = function() { 
var obj = this; 
$('#' + this.id).change(function () { 
if (obj.autoUpload) { 
obj.upload(); 
} 
}); 
if (this.supportsFormData()) { 
if (this.dropId != null) { 
var drop = $('#' + this.dropId)[0]; 
drop.addEventListener("dragover", function(e) { 
e.stopPropagation(); 
e.preventDefault(); 
$('#' + obj.dropId).addClass("dragover"); 
}, false); 
drop.addEventListener("dragout", function(e) { 
$('#' + obj.dropId).removeClass("dragover"); 
}, false); 
drop.addEventListener("drop", function(e) { 
e.stopPropagation(); 
e.preventDefault(); 
$('#' + obj.dropId).removeClass("dragover"); 
obj._uploadUsingFormData(e.dataTransfer.files[0]); 
}, false); 
} 
} else { 
if (this.dropId != null) { 
$('#' + this.dropId).hide(); 
} 
} 
}; 
FileUpload.prototype.supportsFormData = function() { 
return window.FormData != undefined; 
}; 
FileUpload.prototype.upload = function() { 
if (this.supportsFormData()) { 
this._uploadUsingFormData($("#" + this.id)[0].files[0]); 
} else { 
this._uploadUsingFrame(); 
} 
}; 
FileUpload.prototype._uploadUsingFrame = function() { 
var obj = this; 
var $frame = $('#uploadFrame'); 
if ($frame.length == 0) { 
$frame = $('<iframe id="uploadFrame" width="0" height="0" name="uploadFrame" src=""></iframe>'); 
$frame.appendTo("body"); 
$frame.load(function() { 
var response = $frame.contents().text(); 
try { 
var json = $.parseJSON(response); 
$(obj).trigger("onLoad", json); 
} catch(ex) { 
$(obj).trigger("onError", response); 
} 
}); 
} 
var form = $("#" + this.id).closest("form")[0]; 
form.target = 'uploadFrame'; 
form.submit(); 
}; 
FileUpload.prototype._uploadUsingFormData = function (file) { 
var obj = this; 
var xhr = new XMLHttpRequest(); 
xhr.addEventListener("load", function (e) { 
var json = $.parseJSON(xhr.response); 
$(obj).trigger("onLoad", json); 
}, false); 
xhr.addEventListener("error", function (e) { 
$(obj).trigger("onError", e); 
}, false); 
xhr.upload.addEventListener("progress", function (e) { 
if (e.lengthComputable) { 
$(obj).trigger("onProgress", e.loaded, e.total); 
} 
}, false); 
xhr.open("POST", obj.url); 
if (obj.maxSize != null&&file.size>obj.maxSize) { 
$(obj).trigger("onMaxSizeError"); 
return; 
} 
if (obj.extensions != null) { 
var name = file.name; 
var ext = name.substring(name.lastIndexOf("."), name.length).toLowerCase(); 
if (obj.extensions.indexOf(ext) < 0) { 
$(obj).trigger("onExtensionError"); 
return; 
} 
} 
var formData = new FormData(); 
formData.append("files", file); 
xhr.send(formData); 
}; 
FileUpload.prototype.onLoad = function(handler) { 
$(this).bind("onLoad", function(sender, args) { 
handler && handler(args); 
}); 
}; 
FileUpload.prototype.onProgress = function (handler) { 
$(this).bind("onProgress", function(sender, loaded, total) { 
handler && handler(loaded, total); 
}); 
}; 
FileUpload.prototype.onError = function (handler) { 
$(this).bind("onError", function(sender, error) { 
handler && handler(error); 
}); 
}; 
FileUpload.prototype.onMaxSizeError = function(handler) { 
$(this).bind("onMaxSizeError", handler); 
}; 
FileUpload.prototype.onExtensionError = function (handler) { 
$(this).bind("onExtensionError", handler); 
}; 
})();
Javascript 相关文章推荐
csdn 博客的css样式 v3
Feb 24 Javascript
js变换显示图片的实例
Apr 16 Javascript
javascript事件冒泡详解和捕获、阻止方法
Apr 12 Javascript
详谈javascript中DOM的基本属性
Feb 26 Javascript
不得不分享的JavaScript常用方法函数集(下)
Dec 25 Javascript
Javascript实现前端简单的路由实例
Sep 11 Javascript
jQuery源码分析之sizzle选择器详解
Feb 13 Javascript
canvas绘图不清晰的解决方案
Feb 28 Javascript
Vue.js中数据绑定的语法教程
Jun 02 Javascript
AngularJS动态绑定ng-options的ng-model实例代码
Jun 21 Javascript
layui点击导航栏刷新tab页的示例代码
Aug 14 Javascript
JavaScript Math对象和调试程序的方法分析
May 13 Javascript
禁用Tab键JS代码兼容Firefox和IE
Apr 18 #Javascript
JQuery each()嵌套使用小结
Apr 18 #Javascript
JavaScript编程的10个实用小技巧
Apr 18 #Javascript
jquery库或JS文件在eclipse下报错问题解决方法
Apr 17 #Javascript
js截取中英文字符串、标点符号无乱码示例解读
Apr 17 #Javascript
jQuery中对未来的元素绑定事件用bind、live or on
Apr 17 #Javascript
jQuery模拟点击A标记示例参考
Apr 17 #Javascript
You might like
让Nginx支持ThinkPHP的URL重写和PATHINFO的方法分享
2011/08/08 PHP
php安全之直接用$获取值而不$_GET 字符转义
2012/06/03 PHP
ubuntu下编译安装xcache for php5.3 的具体操作步骤
2013/06/18 PHP
php网站地图生成类示例
2014/01/13 PHP
PHP命令行脚本接收传入参数的三种方式
2014/08/20 PHP
js中将具有数字属性名的对象转换为数组
2011/03/06 Javascript
jQuery ui插件的使用方法代码实例
2013/05/08 Javascript
浅析IE10兼容性问题(frameset的cols属性)
2014/01/03 Javascript
jQuery分别获取选中的复选框值的示例
2014/06/17 Javascript
bootstrap datetimepicker2.3.11时间插件使用
2016/11/19 Javascript
Vue-router结合transition实现app前进后退动画切换效果的实例
2017/10/11 Javascript
node 命令方式启动修改端口的方法
2018/05/12 Javascript
vue两组件间值传递 $router.push实现方法
2019/05/15 Javascript
微信小程序按顺序同步执行的两种方式
2019/12/20 Javascript
Vue动态加载图片在跨域时无法显示的问题及解决方法
2020/03/10 Javascript
创建nuxt.js项目流程图解
2020/03/13 Javascript
python操作日期和时间的方法
2014/03/11 Python
Python随机生成带特殊字符的密码
2016/03/02 Python
Python中生成器和迭代器的区别详解
2018/02/10 Python
怎么使用pipenv管理你的python项目
2018/03/12 Python
python中redis查看剩余过期时间及用正则通配符批量删除key的方法
2018/07/30 Python
transform python环境快速配置方法
2018/09/27 Python
django框架用户权限中的session缓存到redis中的方法
2019/08/06 Python
python3 tkinter实现添加图片和文本
2019/11/26 Python
pytorch实现mnist数据集的图像可视化及保存
2020/01/14 Python
海淘零差价,宝贝全球购: 宝贝格子
2016/08/24 全球购物
美国糖果店:Sugarfina
2019/02/21 全球购物
匡威爱尔兰官网:Converse爱尔兰
2019/06/09 全球购物
部队党性分析材料
2014/02/16 职场文书
应聘编辑自荐信范文
2014/03/12 职场文书
中药专业自荐信范文
2014/03/18 职场文书
党员年终个人总结
2015/02/14 职场文书
项目经理岗位职责范本
2015/04/01 职场文书
2015年幼儿园班主任工作总结
2015/05/12 职场文书
Python爬虫框架之Scrapy中Spider的用法
2021/06/28 Python
5行Python代码实现一键批量扣图
2021/06/29 Python