2013-03-22 38 views
0

複製數據這篇文章是一個與previous post跟進,在應用程序上的jQuery 1.4運行,但是從任何版本的建議表示讚賞:jQuery.clone(假)還是從原始來源

目前的問題是,即使使用

rowTemplate = j('.form-denomination:first-child').clone(); 

var newRow = rowTemplate.clone().attr('id', newRowId); 

我可以看到newRow使用Firebug仍持有從列表中的第一個孩子的舊數據,不管我選擇素t來自網頁。

例如,如果要克隆的列表中的第一個孩子是節點[0]

<select id="_denominations[0].id.denominationId" class="removableDenom" name="denominations[0].id.denominationId"> 
    <option value="100">100</option> 
    <option value="1000">1000</option> 
    <option value="10000">10000</option> 
    <option value="500">500</option> 
    <option value="5000">5000</option> 
    <option value="50000" selected="selected">50000</option> 
</select> 

我節點後添加一個新的行[2],它看起來像

<select id="_denominations[3].id.denominationId" class="removableDenom" name="denominations[3].id.denominationId"> 
    <option value="100">100</option> 
    <option value="1000">1000</option> 
    <option value="10000">10000</option> 
    <option value="500">500</option> 
    <option value="5000">5000</option> 
    <option value="50000" selected="selected">50000</option> 
</select> 

看到它仍然顯示50000作爲下拉框的選擇,即使它顯示100在網頁上 所以發生了什麼?

+1

你混爲一談形式數據與jQuery'.data()'?你似乎沒有使用'.data()',但是我在另一個問題中看到了標記中的隱藏字段。 'withDataAndEvents'參數指向'.clone()'的數據是jQuery類型,而不是表單類型。 – MattW 2013-03-22 17:28:58

+1

「'denominations [3] .id.denominationId'顯示爲空」 - 是否將「null」發送到服務器? – zeroflagL 2013-03-22 17:34:43

+0

@MattW我應該在克隆整行後使用'.data()'?但我認爲這是用戶定義數據,在這裏似乎有一個鎖定在重複行防止用戶編輯。當用這樣的重複行提交表單時出現錯誤。 – Dreamer 2013-03-22 17:34:44

回答

3

它仍顯示50000作爲選擇的下拉框,即使它顯示在網頁上 100」

你看到的是HTML源代碼。 50000不是頁面上顯示的當前值,而是頁面加載時顯示的值(或者在這種情況下會顯示)。

+0

沒錯。似乎從螢火蟲可以看到什麼不計算在表格中提交的內容。 – Dreamer 2013-03-22 17:54:44

1

你問更多的.clone()比它能夠給予的,我害怕。它不會爲你更新ID;它不會爲你更新名字;它不會爲您清除表單數據。您必須自己完成所有這些工作 - 您可以在模板上清除的表單數據,但是在插入時必須設置的ID。

rowTemplate = j('.form-denomination:first-child').clone(); 
rowTemplate.find("input[value], textarea").val(""); 
rowTemplate.find("select").each(function() { this.selectedIndex = 0; }); 

如果我們能夠假設第一行總會有像[0],插入會之前的更新變得更輕鬆編號和名稱:

var rowId = "[" + j('.form-denomination').length + "]"; 
var newRow = rowTemplate.clone(); 
newRow.find("[id]").each(function() { var $t = $(this); $t.attr("id", $t.attr("id").replace("[0]", rowId)); }); 
newRow.find("[name]").each(function() { var $t = $(this); $t.attr("name", $t.attr("name").replace("[0]", rowId)); }); 
+0

默認情況下clone()函數的參數爲​​false。所以真正好奇的是什麼克隆(真)會有所作爲。 – Dreamer 2013-03-22 17:50:51