如何从jQuery文件上传中正确解除回调?

时间:2016-07-07 12:18:04

标签: javascript jquery file-upload

我正在使用jQuery File Upload插件。我像这样初始化插件:

var _this = this;

_obj = {
  autoUpload: true,
  maxFileSize: 1000000 // 1mb
};

FileProofer.$uploadform.fileupload(_obj)
  .bind('fileuploadprogress', function (e, data) {
    _this.handleFileProgress(data);
  }).bind('fileuploadadded', function (e, data) {
    _this.checkAddedFiles(data);
  })

然后我将其分开:

FileProofer.$uploadform.fileupload('destroy');

According to the documentation,这应删除所有事件侦听器。但是,当我再次运行相同的初始化代码时,我可以看到fileuploadadded附加了两个(我在_this.checkAddedFiles中使用了console.log)。

所以看起来毁灭召唤并没有真正发挥作用。我在这里做错了吗?

感兴趣的人的一些背景信息:我重新附加文件上传器的原因是我试图在购物车中为不同的产品重复使用相同的html。

1 个答案:

答案 0 :(得分:3)

调用<object>.fileupload('destroy')只能解除以下事件:

    _destroyEventHandlers: function () {
        this._off(this.options.dropZone, 'dragenter dragleave dragover drop');
        this._off(this.options.pasteZone, 'paste');
        this._off(this.options.fileInput, 'change');

根据:https://github.com/blueimp/jQuery-File-Upload/blob/093ec8dfe2eac5e56469ec9e1f6a2af321f4ab0d/js/jquery.fileupload.js#L1308

所以,研究一下,你会发现有一个cleanData函数可以删除事件!

$.cleanData( $('#fileupload') );

来源:https://github.com/blueimp/jQuery-File-Upload/blob/098b507770581d2c8b037fa0a747ff02eb45a329/js/vendor/jquery.ui.widget.js

希望这可以提供帮助。