我想添加/删除动态表单。我正在使用存储在表中的表单,每行都有表单。我有2张桌子: - 正在显示的那个 - 被我要克隆的临时行包围的那个并插入到显示的表中。
在IE中一切正常,但无法提交在Firefox中使用其表单的克隆行。如果我没有克隆行但只是插入它,我可以提交表单,但我需要能够重用该行再插入它,所以我需要使用克隆。使用和不使用克隆生成的Html代码在Firebug中看起来相同。我怎样才能克服这个问题?
用于克隆和插入行的代码:
$('#tempRow').clone().insertAfter($('#templatesTable tr:last'));
答案 0 :(得分:7)
您无法可靠地克隆具有ID属性的内容并将其重新插入DOM。这会创建一个无效的HTML文档,因为您有两个具有相同ID的元素。 Firefox表现正常。
您需要做的是克隆表单,然后将所有ID更改为唯一的(表单及其所有输入和子元素)。然后你就可以提交表格了。
看起来您正在克隆tr
元素并将其插入表格中?如果tr
元素是唯一具有ID的元素,则可以使用:
$('#tempRow')
.clone()
.attr('id', 'tempRow-new')
.insertAfter($('#templatesTable tr:last'));
但请记住,如果表单元素或其任何子元素(包括div
,frameset
,input
等 - 具有ID,则需要要么删除该ID,要么更改它。否则你仍然会有一个无效的文件,可能仍然有问题。
另外
以上代码段不可重复使用。一旦您尝试第二次克隆表单,您将拥有两个ID为tempRow-new
的元素。如果需要多次克隆该行,则必须添加一些递增的数字或某种类型的UUID,以确保所有克隆的元素都是唯一的。