如何在事件上为formData附加值? (blueimp / jQuery的文件上传)

时间:2015-02-13 08:35:02

标签: javascript jquery jquery-file-upload form-data

我暂时拥有此代码 - >

$('#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) {

    }
});

正如您在我的评论中看到的,我想在click事件上向formData对象追加一个值,但我无法弄清楚如何做到这一点。它始终保持初始值。

之前有人这样做了,你是如何解决的? 感谢。

2 个答案:

答案 0 :(得分:0)

如果调用add函数作为fileupload选项对象的引用,则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();
    })
}
警告是,现在处理formdata必须处理一个对象而不是直接处理该值。

答案 1 :(得分:0)

我不想回答我自己的问题,但为了清楚这个问题,我认为这是最好的。我终于找到了解决方案。而不是试图更新"我自己在add:事件中附加了formData,就像这样。

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