基于API documentation,您可以在上传过程中使用"Callback Options" 绑定事件。
$('#fileupload')
.bind('fileuploadadd', function (e, data) {/* ... */})
.bind('fileuploadsubmit', function (e, data) {/* ... */})
.bind('fileuploadsend', function (e, data) {/* ... */})
.bind('fileuploaddone', function (e, data) {/* ... */})
.bind('fileuploadfail', function (e, data) {/* ... */})
.bind('fileuploadalways', function (e, data) {/* ... */})
.bind('fileuploadprogress', function (e, data) {/* ... */})
.bind('fileuploadprogressall', function (e, data) {/* ... */})
.bind('fileuploadstart', function (e) {/* ... */})
.bind('fileuploadstop', function (e) {/* ... */})
.bind('fileuploadchange', function (e, data) {/* ... */})
.bind('fileuploadpaste', function (e, data) {/* ... */})
.bind('fileuploaddrop', function (e, data) {/* ... */})
.bind('fileuploaddragover', function (e) {/* ... */})
.bind('fileuploadchunksend', function (e, data) {/* ... */})
.bind('fileuploadchunkdone', function (e, data) {/* ... */})
.bind('fileuploadchunkfail', function (e, data) {/* ... */})
.bind('fileuploadchunkalways', function (e, data) {/* ... */});
// and some Processing Callback Options
.bind('fileuploadprocessstart', function (e) {/* ... */})
.bind('fileuploadprocess', function (e, data) {/* ... */})
.bind('fileuploadprocessdone', function (e, data) {/* ... */})
.bind('fileuploadprocessfail', function (e, data) {/* ... */})
.bind('fileuploadprocessalways', function (e, data) {/* ... */})
.bind('fileuploadprocessstop', function (e) {/* ... */});
你要找的是:
添加
add回调可以理解为文件上传的回调
请求队列。将文件添加到
文件上传小部件 - 通过文件输入选择、拖放或添加 API 调用。
还有:
处理完毕
单个文件处理成功结束的回调
排队。
Example: function (e, data) {
console.log('Processing ' + data.files[data.index].name + ' done.');
}
只需保留一些变量来增加和管理您的显示。
如果发生错误以显示正确的界面,请注意不要忘记错误处理(带有“进程失败”事件)。
要知道您发送了多少文件,只需使用add events 来跟踪您的变量。
你可以调用一些函数来获得这些值,但我不推荐它们,因为事件绑定是专门为让你的代码随时保持同步而构建的。
关于页面刷新
刷新页面时,您需要使用sessionStorage 来保留值。最简单的方法是每次 number_of_files 更改时更新此值。 (see document on MDN)
// Save data to sessionStorage
sessionStorage.setItem('key', 'value');
// Get saved data from sessionStorage
var data = sessionStorage.getItem('key');
您只需要在加载(或上传插件的初始化)时获取此值并设置变量的初始值...这样它将跟踪上一个会话。
代码建议
var counter = 0;
var number_of_files = 0; // or sessionStorage.getItem('number_of_files')
$('#fileupload')
.bind('fileuploadadd', function (e, data) {
$.each(data.files, function (index, file) {
console.log('Added file in queue: ' + file.name);
number_of_files = number_of_files + 1;
sessionStorage.setItem('number_of_files', number_of_files);
});
})
.bind('fileuploadprocessdone', function (e, data) {
console.log(counter + " / " + number_of_files);
});
您只需要在代码中包含所有大小写,例如删除、修改和其他...以确保您的值始终是最新的。但是 jQuery-File-Upload 不应该负责您的视图,作为 MVC 模式的一部分,它只做一件事,即上传并为您提供所有工具来使用它