关于JS动态增加表单元素的问题。。。。

function addRow() {

   var topicsTable = document.getElementById("tbl");

   var newTR = tbl.insertRow(tbl.rows.length);


   var newNameTD = newTR.insertCell(0);

   newNameTD.innerHTML="<td>&nbsp;<s:action name="pshowAll" /></td>"

     var newNameTD = newTR.insertCell(1);

   newNameTD.innerHTML='<td><s:select name="product" list="#request.all"   listKey="id" listValue="name"  headerKey="-1" headerValue="-请选择产品-"   /></td>'

    var newNameTD = newTR.insertCell(3);

   newNameTD.innerHTML='<td><s:textfield  name="quantity" size="10" maxlength="10" /></td>'

    var newNameTD = newTR.insertCell(4);

   newNameTD.innerHTML='<td><s:textfield name="cost"/></td>'
   }

提示什么未结束字符串。。。newNameTD.innerHTML='

'就这句有问题

[quote]真没注意这么多问提。。。还有。。。如果我加了这么多条记录,我怎么调用ACTION保存呢? [/quote]
这个要另外收费的啊。
最简单的方法就是使用form表单的document.forms['formname'].sumbit();提交这个form了。
在action里面定义
[code="java"]private String[] product;
private String[] quantity;
private String[] cost;[/code]
就可以接受到所有form提交过来的记录了。保存数据的过程就不多说了。

Struts标签最后也会被解析成HTML标签,这是在请求页面时做的,通过JS无法添加吧,JS已经在浏览器里了。

newNameTD.innerHTML='

'

这句后面明显没有分号嘛

newNameTD.innerHTML="

 "
这里双引号套了双引号

每句语句结束都要加分号,要不然的话,JS会默认在每行后面都加分号,对于比较长的,换行的语句,就被断开了。
你把每句都加上分号试试

还有,嵌套的双引号也是发生这个问题的原因之一。要么转义,要么单双引号分开。

每句Javascript语句的结束都加分号

你提供的脚本很多问题啊。
1.var topicsTable = document.getElementById("tbl");引用的对象都不一样
2.newTR.insertCell(0); 这样的语句中少了 insertCell(2);
3.newNameTD.innerHTML="

 "这一句就用了""的重叠;
4.你对好把你页面解析后的源码copy下来分析。因为struts2的标签解析出来的东西有可能造成脚本的错误。

给你一个建议或说是做法吧。
把你的这个东西写到JSP里面,如下:
[code="jsp"]









 

...
...
[/code]
写如一个脚本:
[code="javascript"]
function addRow() {
var topicsTable = document.getElementById("tbl");
var newTR = topicsTable.insertRow(topicsTable.rows.length);
topicsTable.innerHTML=document.getElementById("addTrModel").innerHTML;
}
[/code]

[code="html"]
newNameTD.innerHTML='


>-请选择产品-
奶茶
娃哈哈
爽歪歪
西瓜


'
[/code]

js 里字符串是不支持换行的,这样换行写语法是错误的。

可以用 \r\n 来代替 换行

如:
aa = "aaaa\r\nbbb\r\n"