无法绑定按钮时如何提交blueimp jquery文件上传到外部

How to submit blueimp jquery file upload externally when I can't bind the button

我正在调查 jquery 文件上传,但无法提交。先说一下流程再发

  1. 用户选择了一张他们想要更改的图片
  2. 这会在输入上触发更改事件
  3. 图像是在定制的图像裁剪器中呈现的
  4. 如果用户在选择移动图像后接受裁剪更改 about/zooming 等,则需要将图像提交给服务器

问题: 在选择图像之前,该按钮不会呈现在页面上。我尝试执行以下操作:

首先,在包含文件输入的表单的页面呈现完成时实例化插件,因为它始终在页面上。是隐藏表格。

$el.fileupload({
     url: self.uploadImageUrl,
     autoUpload: true,
     add: function (e, data) {
           if (beforeUpload(data, e))
                 data.submit();
     },
     error: function (jqXHR, textStatus, errorThrown) {
                    helper.Logger.error(errorThrown);
     }
});

如果满足以下条件,beforeUpload 函数基本上 return 为真: - 图像裁剪器模板当前显示在屏幕上 - 图像 src 与裁剪器中当前的 src 匹配 否则,它 return 是错误的。

当时的想法是,当用户第一次选择图像时,beforeUpload() 变为 false,因为图像裁剪器未呈现。这将允许用户进行裁剪,然后单击接受按钮,我只是简单地做:

$inputFileButtonWithinFileUploadForm.change()

这将 运行 通过 beforeUpload 这一次将 return 为真,导致插件将表单连同其他数据一起发送。 (我想连同文件一起提交裁剪细节)

不幸的是,无论出于何种原因,插件都忽略了输入元素上的 .change() 。

我只能看到一个感觉很脏的解决方案 - 有两个输入,一个用于图像选择,另一个用于表单。当用户接受图像时,表单输入会更新。如果可能的话,我想要一个更清洁的解决方案。我不明白为什么插件不只是有一个不需要参数的 .submit() 方法 - 它已经知道表单。我在 API 中看到了一个提交方法,但它需要文件作为参数,我想同时发送文件和裁剪数据 - 这可能吗?

谢谢

在这里找到答案:jQuery file upload: Is it possible to trigger upload with a submit button?

基本上,用

绑定表单
               add: function (e, data) {
                    options.onFileAdd(data, e);

                    $el.on(customEventName, function () {
                        data.submit();
                    });                            
                },

然后是外部按钮:

$btn.on("click", function() { $yourForm.trigger("customEventName"); })