自制的文件上传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 相关文章推荐
js中将URL中的参数提取出来作为对象的实现代码
Aug 16 Javascript
js判断背景图片是否加载成功使用img的width实现
May 29 Javascript
javascript实现单击和双击并存的方法
Dec 13 Javascript
jQuery实现高亮显示网页关键词的方法
Aug 07 Javascript
JavaScript的Backbone.js框架入门学习指引
May 07 Javascript
JS实现简单的tab切换选项卡效果
Sep 21 Javascript
详解Vue2 无限级分类(添加,删除,修改)
Mar 07 Javascript
微信小程序实现折叠展开效果
Jul 19 Javascript
详解VUE前端按钮权限控制
Apr 26 Javascript
javascript实现点亮灯泡特效示例
Oct 15 Javascript
vue 组件销毁并重置的实现
Jan 13 Javascript
Node.js中文件系统fs模块的使用及常用接口
Mar 06 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
简体中文转换为繁体中文的PHP函数
2006/10/09 PHP
php cache类代码(php数据缓存类)
2010/04/15 PHP
php ajax 静态分页过程形式
2011/09/02 PHP
一个简洁的PHP可逆加密函数(分享)
2013/06/06 PHP
destoon后台网站设置变成空白的解决方法
2014/06/21 PHP
ThinkPHP里用U方法调用js文件实例
2015/06/18 PHP
PHP实现获取毫秒时间戳的方法【使用microtime()函数】
2019/03/01 PHP
麦鸡的TAB切换功能结合了javascript和css
2007/12/17 Javascript
jQuery之ajax删除详解
2014/02/27 Javascript
javascript闭包传参和事件的循环绑定示例探讨
2014/04/17 Javascript
浅谈js中变量初始化
2015/02/03 Javascript
jQuery的Scrollify插件实现滑动到页面下一节点
2015/07/05 Javascript
网页中JS函数自动执行常用三种方法
2016/03/30 Javascript
利用js判断手机是否安装某个app的多种方案
2017/02/13 Javascript
jQuery阻止移动端遮罩层后页面滚动
2017/03/15 Javascript
vue-router单页面路由
2017/06/17 Javascript
vue结合element-ui使用示例
2019/01/24 Javascript
Vue基于vuex、axios拦截器实现loading效果及axios的安装配置
2019/04/26 Javascript
python正则中最短匹配实现代码
2018/01/16 Python
Python当中的array数组对象实例详解
2019/06/12 Python
Python实现 PS 图像调整中的亮度调整
2019/06/28 Python
pytorch 把图片数据转化成tensor的操作
2021/03/04 Python
Canvas多边形绘制的实现方法
2019/08/05 HTML / CSS
html5 datalist 选中option选项后的触发事件
2020/03/05 HTML / CSS
司机岗位职责
2013/11/15 职场文书
尽职尽责村干部自我鉴定
2014/01/23 职场文书
最经典的商业地产项目广告词
2014/03/13 职场文书
公务员试用期满考核材料
2014/05/22 职场文书
小学英语教师先进事迹
2014/05/28 职场文书
2014年财务工作总结范文
2014/11/11 职场文书
中英文求职信范文
2015/03/19 职场文书
雷锋电影观后感
2015/06/10 职场文书
员工聘用合同范本
2015/09/21 职场文书
2016年第二十届“母亲节暨幸福工程救助贫困母亲活动日”活动总结
2016/04/06 职场文书
OpenCV图像变换之傅里叶变换的一些应用
2021/07/26 Python
教你使用RustDesk 搭建一个自己的远程桌面中继服务器
2022/08/14 Servers