0

我有一个表,其中每一行都包含一些数据(data-id)和一个<div class = "upload">Upload</div>. 上传者需要传递一个对象,该对象包含uploader_obj.buttonset 作为 initiating <div>,任何参数,例如要发送到服务器的 data-id ,以及一堆我没有显示的其他内容。

以下脚本循环遍历表,修改对象以设置按钮和 params.id,并在每一行上创建上传器。

虽然在每一行上创建了一个单独的上传按钮,但它们都引用了相同的 params.id,该参数设置为最后一行的值(即 222)。我需要将每个设置为其特定行的值。

解决它的一种方法是让每个上传者都有自己的upload_obj,但这似乎浪费了内存。

相反,我尝试在 uploader_obj 中引用 data-id。我可以在 onSubmit 中这样做,但是,还没有弄清楚如何使用这个值来设置 param.id。我试图通过执行类似的操作将其设置在参数中,params: {'id':$(this.button).parent().parent().data('id')}但这是我的文档,而不是上传者。

所以......如果不为每一行制作单独的 uploader_obj,我怎样才能让每一行的上传者将自己的 param.id 发送到服务器?谢谢

PS。对不起,弱标题。我真的试图想出一个更好的,但不能。

<table>
    <tr data-id="123"><td>Hello</td><td><div class="upload">Upload</div></td></tr>
    <tr data-id="321"><td>Hello</td><td><div class="upload">Upload</div></td></tr>
    <tr data-id="222"><td>Hello</td><td><div class="upload">Upload</div></td></tr>
</table>

var uploader_obj = {
  button:null,
  params: {'id':null},
  onSubmit: function(id, fileName) {
     var id=$(this.button).parent().parent().data('id')
     console.log(id);
  },
  otherStuff: whatever
};


$('#myTable div.upload').each(function(i,v){
    uploader_obj.button=this;
    uploader_obj.params.id=$(this).parent().parent().data('id');
    new qq.FileUploaderBasic(uploader_obj);
});
4

3 回答 3

1

我认为问题在于您永远不会创建“uploader_obj”的新对象。因此,在每次循环迭代中,您都会覆盖对象的值。

编辑:

var a = new Object();

$('#myTable div.upload').each(function(i,v){
    a[i] = uploader_obj;
    a[i].button=this;
    a[i].params.id=$(this).parent().parent().data('id');
    new qq.FileUploaderBasic(a[i]); 
});
于 2012-12-15T14:29:45.180 回答
1

您在每次迭代中都传递相同的对象,只需从循环内的值创建对象即可:

$('#myTable div.upload').each(function(i,ele){
    new qq.FileUploaderBasic({
        button: ele,
        params: {
            id: $(ele).closest('tr').data('id')
        },
        onSubmit: function(id, fileName) {
            var id=$(this).closest('tr').data('id')
        },
        otherStuff: whatever
    });
});
于 2012-12-15T14:35:53.980 回答
0

与其将上传器对象作为全局变量,不如将其设置为 qq.FileUploaderBasic 函数的局部变量,并将 button_object 和 data_id 作为参数发送,它可能会起作用。你可以试试

$('#myTable div.upload').each(function(i,v){
    var button=this;
    var id=$(this).parent().parent().data('id');
    new qq.FileUploaderBasic(button,id);
});

并将您的对象保留在您的函数中。

于 2012-12-15T14:36:36.967 回答