在对象中引用DOM

时间:2012-12-15 14:21:26

标签: javascript jquery

我有一个表,其中每行包含一些数据(data-id)和<div class = "upload">Upload</div>。上传者需要传递一个对象,其中包含uploader_obj.button设置为发起<div>,任何参数,如data-id将被发送到服务器,以及一堆其他我没有的东西秀。

以下脚本循环遍历表,修改对象以设置button和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);
});

3 个答案:

答案 0 :(得分: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]); 
});

答案 1 :(得分: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
    });
});

答案 2 :(得分: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);
});

并将您的对象保留在您的功能中。