我做了一个自定义插件,为jQuery File Upload插件添加常用功能和验证。这是一份简历,所以你可以得到这个想法。
$.fn.myCustomUpload = function(options) {
if (!$(this).is('input:file')) {
return false;
}
$(this).fileupload({
maxChunkSize: options.maxChunkSize,
maxFileSize: options.maxFileSize,
acceptFileTypes: options.allowedTypes,
type: 'POST',
dataType: 'json',
add: function (e, data) {
// common validations
},
start: function (e) {
// foo
if (options.onUploadStart) {
options.onUploadStart();
}
},
fail: function(e, data) {
// foo
if (options.onUploadError) {
options.onUploadError(result);
}
},
done: function(e, data) {
// foo
if (options.onUploadDone) {
options.onUploadDone(media_data);
}
}
});
};
问题是我进行了验证或处理数据,并使用回调返回结果。但是,我注意到回调是在下一次调用插件时被覆盖的。所以,我在一个地方上传一个文件,然后在另一个地方重新显示结果!我做错了什么?
我是否需要将选项存储到每个输入元素,例如.data()
?
编辑2:html和JS结构的小提琴(不起作用) https://jsfiddle.net/a6axfm3v/
编辑:我以两种方式使用此插件
$input.myCustomUpload({
// ...
onUploadStart: this.onNewPostUploadStart.bind(this),
onUploadProgress: this.onNewPostUploadProgress.bind(this), //this reference to my object
onUploadError: this.onNewPostUploadError.bind(this),
// ...
});
$uploads_buttons = $container.find('._attach_image');
$uploads_buttons.each(function() {
var $upload_button = $(this);
var $parent = $upload_button.parents('._post-container');
$upload_button.myCustomUpload({ /*options, callbacks, etc*/});
});
$input
有自己的回调,$uploads_buttons
都有相同的,但与$input
的不同......
感谢。