这篇文章是对previous post的跟进,应用程序在jQuery 1.4上运行,但是对任何版本的建议表示赞赏:
目前的问题是使用
rowTemplate = j('.form-denomination:first-child').clone();
和
var newRow = rowTemplate.clone().attr('id', newRowId);
我可以看到newRow
仍然使用firebug从列表中保留第一个孩子的旧数据,无论我从网页中选择什么。
例如,如果要克隆的列表的第一个子节点是node [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 那是怎么回事?
答案 0 :(得分:3)
“它仍然显示50000作为下拉框的选择,即使它在网页上显示100 ”
您看到的是HTML源代码。 50000不是页面上显示的当前值,而是页面加载时显示的值(或者更确切地说是这种情况)。
答案 1 :(得分: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]
的id和名称,那么插入前的更新会更容易一些:
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)); });