如何在事件上向 formData 附加一个值? (blueimp/jQuery-File-Upload)

How do I append a value to formData on event? (blueimp/jQuery-File-Upload)

我暂时有这个代码 ->

$('#file').fileupload({
    formData: {
        valueThatChangesOverTime: value,
        staticValue: 0
    },
    maxNumberOfFiles: 1,
    autoUpload: false,
    dataType: 'json',
    add: function (e, data) {
        $('#importFilesBtn').on("click", function () {
            // Set value to formData.valueThatChangesOverTime
            data.submit();
        })
    },
    done: function (e, data) {

    }
});

正如您在我的评论中看到的那样,我想在单击事件时向 formData 对象附加一个值,但我不知道该怎么做。它始终保持初始值。

以前有人做过吗,你是怎么解决的? 谢谢

如果调用 add 函数作为对文件上传选项对象的引用,则 this 将设置为指向该对象。 有了这个假设,以下应该有效:

add: function (e, data) {
    var fileUploadObj = this
    $('#importFilesBtn').on("click", function () {
        // Set value to formData.valueThatChangesOverTime
        fileUploadObj.formData.valueThatChangesOverTime = 'foo'
        data.submit();
    })
}

编辑:另一种选择。 我想不出另一种从内部引用对象的方法,但另一种方法是利用对象链接。感觉有点脏,但是可以用。

//some external object
foo = {"changeThisValue":"value"}
$('#file').fileupload({
formData: {
    valueThatChangesOverTime: foo,
    staticValue: 0
},
...
add: function (e, data) {
    $('#importFilesBtn').on("click", function () {
        // Set value to formData.valueThatChangesOverTime
        foo.changeThisValue = 'bar'
        data.submit();
    })
}

需要注意的是,现在处理表单数据的任何东西都必须处理一个对象,而不是直接处理值。

我不喜欢回答我自己的问题,但为了这个问题的清晰度,我认为这是最好的。我终于找到了解决方案。我没有尝试 "update" formData,而是自己将其附加到 add: 事件中,就像这样。

add: function (e, data) {
        $('#importFilesBtn').on("click", function () {
            data.formData = {
                valueThatChangesOverTime: myNewValue,
                staticValue: 0
            };
            data.submit();
        })
    },