通过五个jquery插件联合调用的方式,来形成弹出层上传控件,可以批量上传文件。没有用ajax,也不靠flash,核心插件源码如下:
/*
* jQuery uploadbtn v0.3
* Copyright 2011, chinet_bridge
*/
//examples of call:$("#sclogo").uploadbtn3({ savepath: "~/UploadFile", callback: "setlogo" });
; (function($) {
$.fn.uploadbtn = function(options) {
var defaults = {
/*自定义文件上传框上传成功后显示图片的函数callback,参数如下
v:返回若干逗号分隔的图片名
n:显示图片标签的id
p:存储文件夹,比如~/UploadFile/SecuriCompany/
w:图片宽度
h:图片高度
*/
callback: "", //自定义文件上传框上传成功后显示图片的函数callback ,这里写函数名称
savepath: "",
width: "100",
height: "100",
selector: "li",
url: "ulb.aspx",
//调用正式操作之前的函数
callhook: function(n, p, w, h) {
return "";
}
}
//生成唯一数
function newguid() {
var guid = "";
for (var i = 1; i <= 32; i++) {
var n = Math.floor(Math.random() * 16.0).toString(16);
guid += n;
if ((i == 8) || (i == 12) || (i == 16) || (i == 20))
guid += "-";
}
return guid;
}
var opts = $.extend(defaults, options);
return this.each(function() {
var o = $.metadata ? $.extend({}, opts, $(this).metadata()) : opts;
$(this).delegate(o.selector, "mouseenter", function() {
var btn = $(this);
if (typeof btn.attr("id") == "undefined") {
btn.prop("id", newguid());
}
if (btn.prev().length > 0) { return true; }
var h = "<div class=upp ><iframe src='{6}?callback={0}&element={5}&width={3}&height={4}&savepath={2}' width={3} height={4} scrolling='no' frameborder='0' allowtransparency='true' ></iframe>{1}</div>";
h = h.replace("{6}", o["url"])
.replace("{5}", btn.get(0).id)
.replace("{0}", o["callback"])
.replace("{1}", opts.callhook(btn.get(0).id, o["savepath"], o["width"], o["height"]))
.replace("{2}", escape(o["savepath"]))
.replace(/\{3\}/g, o["width"])
.replace(/\{4\}/g, o["height"])
;
btn.before(h);
});
});
};
})(jQuery);
采取iframe方式来做图片无刷新上传。