为什么Blueimp的JQuery文件上传添加所有上一页.即使在init上设置了选项[replaceFileInput:false]和[maxNumberOfFiles:1],也会选择文件?

sta*_*tic 7 jquery file-upload xmlhttprequest blueimp

我只有一些输入字段和一个文件输入字段的普通表单.我使用Blueimp的Jquery File Upload插件上传文件.它似乎工作,如果您选择一个文件,然后单击上传按钮.但是,如果您重新选择要上传的文件,它会保存所有选择的史前文章,并在上传后将所有XHR发送到服务器.

我只想上传一个当前选定的文件,而不是所有以前选择的文件(在文件打开对话框中).

这是我的js模块来处理上传:

$(function () {
    $('#upload_form').fileupload({

        dataType: 'json',
        autoUpload: false,
        fileInput: '#filechose_button',
        replaceFileInput: false,
        maxNumberOfFiles: 1,
        multipart: true,

        add: function (e, data) {

            $('#upload_button').click(function () {

                $('#upload_button').attr('disabled', true);
                ...
                data.submit();
                ...
            });
        },

        done: function (e, data) {
          ... // successfully uploaded
        },

        progressall: function (e, data) {
          ... // update a progress bar
        }
    });
});
Run Code Online (Sandbox Code Playgroud)

我在这里找到的解决方案(如何使用blueimp文件上传插件只上传一次文件?)似乎不是最好的方式(我认为它很脏),因为解锁click事件仍然无法解决收集问题所有以前选择的文件(内存泄漏的种类)

该选项maxNumberOfFiles: 1对我不起作用.

小智 8

我有同样的问题,我的解决方案是取消绑定我的按钮的click事件,并在调用add事件时将其绑定回来.试试这个.

...

add: function (e, data) {

        $('#upload_button').unbind('click');
        data.context = $('#upload_button').bind('click', function () {
                    ...
                    data.submit();
        }
}
Run Code Online (Sandbox Code Playgroud)