如何在blueimp jQuery FileUpload中删除多个文件之前确认?

时间:2014-01-19 03:04:51

标签: jquery file-io jquery-file-upload blueimp

我已经能够确认个别删除,但ui工具栏中的.delete按钮似乎只是为所有选定项目运行删除点击。

我真正想要做的是在此上下文中禁止我对单个项目的删除提示,并为所选项目数组提示一次(理想情况下列出单个文件的文件名)。我的个人覆盖如下:

$('#fileupload').bind('fileuploaddestroy', function (e, data) {
  var filename = data.url.substring(data.url.indexOf("=") + 1,data.url.indexOf("&"))
  var delconf = confirm("Delete the file \"" + decodeURIComponent(filename) + "\"?");
    if(!delconf) {
        e.preventDefault;
        return false;
    }
});

我甚至不确定是否有特定事件要覆盖多次删除,或者我将如何找到它,因此对这些主题的任何建议也会有所帮助。

1 个答案:

答案 0 :(得分:1)

到目前为止,我的答案是使用 _initButtonBarEventHandlers 函数中的以下代码修改jquery.fileupload-ui.js:

        this._on(fileUploadButtonBar.find('.delete'), {
            click: function (e) {
                if(this._trigger('multiDestroy')){                      
                    if (e.isDefaultPrevented()) {
                        return false;
                    }
                    e.preventDefault();
                    filesList.find('.toggle:checked')
                        .closest('.template-download')
                        .find('.delete').click();
                    fileUploadButtonBar.find('.toggle')
                        .prop('checked', false);
                    this._trigger('multiDestroyFinished');
                }
            }
        });

大约第381行的空白回调:

// Callback for multiple file deletion:
multiDestroy: function (e) {},
// Finished callback for multiple file deletion:
multiDestroyFinished: function (e) {}

我的内联代码如下所示:

var multiDel = false;

$('#fileupload').on('fileuploaddestroy', function (e, data) {
      if(multiDel){ return true; };
      var filename = data.url.substring(data.url.indexOf("=") + 1,data.url.indexOf("&"))
      var delconf = confirm("Delete the file \"" + decodeURIComponent(filename) + "\"?");
      if(!delconf) {
          e.preventDefault;
          return false;
      }
});

$('#fileupload').fileupload({
    multiDestroy: function (e) {
        var delconf = confirm("Are you sure you wish to delete the selected files?");
        if (!delconf) {
            e.preventdefault;
            return false;
        } else { 
            multiDel = true; 
        }
    }
})
.fileupload({
    multiDestroyFinished: function (e) {
      multiDel = false;
    }
});

我不会说我对这个答案感到非常满意,部分原因是因为在if块中包含click函数似乎很脏,部分原因是因为我正在重写Sebastian的插件而不是扩展它。我不太可能接受我的答案,所以如果其他人有更好的答案,请带上它!