0

我正在尝试使用此处介绍的 Ajax 文件上传:http: //valums.com/ajax-upload/

如您所见,我需要创建一个 qq.FileUploader 对象来初始化脚本。但是,我需要能够在不知道元素 ID 的情况下动态创建这些对象。我试过创造这样的东西:

var uploader, i = 0;
$(".file-upload").each(function() {
    $e = $(this);
    i++;
    uploader[i] = new qq.FileUploader({
        element: $(this)[0],
        action: 'uploadfile.php',
        allowedExtensions: ['doc', 'docx', 'pdf'],
        multiple: false,
        onComplete: function(id, fileName, responseJSON) {
            $($e).siblings('input').val(responseJSON.newfilename);
        }
    });
});

我了解到[i]我添加的部分破坏了脚本,因为我不能在数组中包含对象。

还有另一种方法可以动态创建这些对象吗?它们都需要有一个唯一的名称,否则onComplete函数会被所有函数覆盖。我尝试使用eval(),但似乎无法使其正常工作。

4

2 回答 2

2

您必须先声明uploader为数组:

var uploader = [];  

因为您声明了变量而没有定义它,所以它的默认值是undefined,并且您的代码被翻译成类似undefined[i]触发错误的东西。

于 2012-08-19T17:44:04.173 回答
1

必须是类似的东西

var uploader = {}; 

否则 uploader 为空,您无法为其分配任何内容。

编辑

因此,在我看来,有两种选择,如果一个人想要一个数组,那么声明一个数组是有意义的,var uploader = [];然后使用该uploader.push()方法或将其定义为一个对象var uploader = {};,然后执行uploader[i] = ....

后者也可以用 a 数组来做,但在后一种情况下,我认为维护计数器 ( i) 没有意义。

于 2012-08-19T17:45:47.140 回答