Jquery 如何确定哪些文件进度适用于?

Jquery 如何确定哪些文件进度适用于?,jquery,blueimp,Jquery,Blueimp,关于,有一个progress事件,它传回一个data对象,据我所知,该对象报告每个文件的进度 我正在通过add()事件将文件和进度条添加到我的UI中,我想稍后在progress()事件中更新它们各自的进度条。我遇到的问题是如何匹配它们 我需要给每个文件一个唯一的ID,这样我就可以对它们进行配对,但据我所知,没有提供一个。我们该怎么做 每个文件对象是否都有一些JavaScript哈希代码 一些代码: $('#fileupload').fileupload({ url: 'api/combo

关于,有一个
progress
事件,它传回一个
data
对象,据我所知,该对象报告每个文件的进度

我正在通过
add()
事件将文件和进度条添加到我的UI中,我想稍后在
progress()
事件中更新它们各自的进度条。我遇到的问题是如何匹配它们

我需要给每个文件一个唯一的ID,这样我就可以对它们进行配对,但据我所知,没有提供一个。我们该怎么做

每个文件对象是否都有一些JavaScript哈希代码

一些代码:

$('#fileupload').fileupload({
    url: 'api/combox_upload.php',
    dataType: 'json',
    dropZone: $dropZone,
    done: function (e, data) {
        $.each(data.result, function(index, file) {
            // indicate completeness
        });
    },
    add: function(e, data) {
        $.each(data.files, function(index, file) {
            console.log(file);
            $file_uploads.append($('<li>').text(file.name));
        });
        data.submit(); // start upload immediately
    },
    progress: function(e, data) {
        console.log(data);
    }
});

我现在感到困惑的是,在progress事件中,它不仅给你一个文件,它还给你一个包含1个文件的数组。。。我不确定是否保证其中始终有一个文件(
data.files
)或没有。

您没有发布实际调用文件上载或绑定到进度事件的代码,但我猜您只需要在
fileuploadprogress
函数周围放置一个包装器


$.proxy
函数允许您指定此将在函数中引用的内容。然后在您的函数中,您将可以访问
数据
,并且
将能够提供上下文。

我应该阅读名为:

$(函数(){
$('#fileupload')。fileupload({
数据类型:“json”,
添加:功能(e、数据){
data.context=$(“

”).text('Uploading…).appendTo(document.body); data.submit(); }, 完成:功能(e,数据){ data.context.text('Upload finished'); } }); });


但我不会为每个文件手动绑定
进度
事件…这都是自动完成的。如何为每个文件设置不同的上下文?顺便说一句,发布了一些代码。查看
fileupload
小部件的文档/源代码,它有一个名为
singleFileUploads
的选项,默认设置为
true
。它可以处理多个文件,但只要您不将该值更改为
false
,就应该保证
文件中只有一个项。。我没有注意到默认情况下这是
true
。。。但我不确定这是如何解决这个问题的?您只需实例化一次
$.fileupload()
,并为其提供一个进度事件。使用
$.proxy
您必须将每个文件绑定到不同的回调。似乎
数据
对象在
添加
进度
完成
之间共享。我假设
data.files[I].name
是一个合理的标识符。如果数组中已有同名文件,则可以阻止
add
调用
data.submit()
。我曾考虑使用文件名作为标识符,但用户可以很容易地在不同文件夹中选择同名文件。
var fileId = 0;

$('#fileupload').fileupload({
    url: 'api/combox_upload.php',
    dataType: 'json',
    dropZone: $dropZone,
    done: function (e, data) {
        $.each(data.result, function(index, file) {
            // indicate completeness
        });
    },
    add: function(e, data) {
        $.each(data.files, function(index, file) {
            //console.log(file);
            console.log(filename, fileId);
            $.data(file, 'id', fileId++);
            $file_uploads.append($('<li>').text(file.name));
        });
        data.submit(); // start upload immediately
    },
    progress: function(e, data) {
        var progress = parseInt(data.loaded / data.total * 100, 10);
        $.each(data.files, function(index, file) {
            console.log($.data(file,'id'), file.name, progress);
        });
        //console.log(data);
    }
});
$(function () {
    $('#fileupload').fileupload({
        dataType: 'json',
        add: function (e, data) {
            data.context = $('<p/>').text('Uploading...').appendTo(document.body);
            data.submit();
        },
        done: function (e, data) {
            data.context.text('Upload finished.');
        }
    });
});