2012-12-15 53 views
0

我有一張表,其中每行包含一些數據(data-id)和一個<div class = "upload">Upload</div>。上傳者需要傳遞一個對象,其中包含uploader_obj.button設置爲啓動<div>,任何參數(如data-id要發送到服務器),以及一些其他我沒有顯示的東西。在對象中引用DOM

以下腳本在表格上循環,修改要設置按鈕和params.id的對象,並在每一行上創建上傳器。

雖然在每一行上都創建了一個單獨的上傳按鈕,但它們都引用了設置爲最後一行值(即222)的相同的params.id。我需要將每個設置爲其特定行的值。

解決這個問題的一種方法是讓每個上傳者擁有自己的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); 
}); 

回答

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 
    }); 
}); 
+0

是的,我認爲這可能是我需要做的。傳遞給FireUploaderBasic的對象比我顯示的要大,我希望有一種方法可以傳遞同一個對象。 – user1032531

+0

如果你想要不同的值,你需要不同的對象,或者至少重寫對象中的所有值,在你的情況下它看起來更像是工作,而不是在每次迭代中創建一個新對象。 – adeneo

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]); 
}); 
+0

同意。那麼爲每一行創建一個新對象是唯一的解決方案? – user1032531

+0

而我將如何爲每一行創建一個新對象?我試過'新的qq.FileUploaderBasic($(uploader_obj).clone());'沒有成功。 – user1032531

+0

我認爲是的,是的 – chsymann

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); 
}); 

並保持你的對象在你的功能。

+0

這需要修改qq.FileUploaderBasic比我想要做的更多。 – user1032531