我有一个表,其中每行包含一些数据(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);
});
答案 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);
});
并将您的对象保留在您的功能中。