我正在试验
Blueimp’s jQuery-File-Upload插件,由
demo判断看起来非常有前途。
这很容易实现:
var $uploadButton = $("#fileop-upload");// <input type="file" id="fileop-upload" [etc] /> $uploadButton.fileupload({ url : "//domain/path/to/receive-uploaded-files" });
选定的文件被上传到没有按预期的方式刷新页面,但当然这样的最小配置,用户不会得到任何通知。这里是插件的回调会派上用场的地方。
根据文档,有两种方法来定义回调。例如,添加事件(在选择上传文件时触发)可以在原始配置对象中添加,如下所示:
$uploadButton.fileupload({ add : addFileListener,url : "//domain/path/to/receive-uploaded-files" });
或者:
$uploadButton.bind("fileuploadadd",addFileListener);
更好奇的是,没有其他的回调 – 特别是进步和开始 – 似乎正在发射,不管我如何约束它们:
$uploadButton.fileupload({ add : addFileListener,progress : progressListener,start : startListener,url : "//domain/path/to/receive-uploaded-files" });
要么
$uploadButton.fileupload({ add : addFileListener,url : "//domain/path/to/receive-uploaded-files" }); $uploadButton.bind("fileuploadprogress",progressListener"); $uploadButton.bind("fileuploadstart",startListener");
什么是.bind方法的失败的解释,为什么进程或开始的侦听器不会激活?
解决方法
我是jQuery File Upload插件的作者。
我没有解释为什么第三个示例代码中的fileuploadadd事件不会触发。
但是,如果覆盖添加回调选项,则必须通过调用数据参数中的提交方法来确保文件上传是开始的,如Options documentation中的添加回调(并在插件的源代码中所述) )。
例如以下代码应该打印出不同的回调事件:
$('#fileupload').fileupload({ add: function (e,data) { console.log('add'); data.submit(); },progress: function (e,data) { console.log('progress'); },start: function (e) { console.log('start'); } }).bind('fileuploadadd',function (e,data) { console.log('fileuploadadd'); }).bind('fileuploadprogress',data) { console.log('fileuploadprogress'); }).bind('fileuploadstart',function (e) { console.log('fileuploadstart'); });
还要注意,该插件是模块化的,UI版本(在下载示例中使用)使用将被上述代码覆盖的回调选项。这就是为什么事件绑定是如此有用,因为它允许定义额外的回调方法,而不会覆盖通过选项对象设置的回调。